如果我需要经常读取文件,并且使用fread将文件加载到无符号char的向量中,那么即使无符号char的向量在读取后立即销毁,后续的fread也会非常快。

在我看来,某些东西(Windows或磁盘)可以缓存文件,因此读取速度非常快。我尚未阅读有关此行为的任何内容,因此我不确定是什么真正原因。

如果我大约一小时不使用应用程序,然后再次进行读取,则读取速度很慢。
在我看来,缓存已清空。

有人可以向我解释这种行为吗?我想积极地使用它。
当读取速度慢时,这对我来说是个问题。

内存映射文件理论上可以工作,但是文件本身太大,因此我无法使用它。

最佳答案

90/10法


  计算机程序的90%的执行时间花费在执行10%的代码上


这不是一个规则,但通常是这样,因此许多程序尝试尽可能保留最新数据,因为很有可能很快会再次访问该数据。

Windows操作系统也不例外,在接收到读取文件的命令后,操作系统会保留一些有关文件的数据。它在存储程序的时代存储在内存地址中,如果可能的话,甚至将一部分(甚至全部)二进制数据存储在内存中,如果该读取紧接在第一个文件之后,它将使下一个文件的读取速度更快。

总而言之,缓存是正确的,但是我不能说,由于我不在Microsoft中工作,这确实在发生……



也回答问题的下一部分。将文件映射到内存可能是解决方案,但是如果文件很大,则计算机可能没有太多的内存,因此这不是一个选择。但是,您可以使用90/10法则。在您的情况下,您应该只将文件的一部分映射到内存中(那部分是最重要的),在读取时,还应该制作一个包含整体参数的数据表。

不知道确切的情况,但是可以节省。

10-02 02:45