0

如果我需要经常从文件中读取,并且我会使用 fread 将文件加载到 unsigned char 的向量中,那么即使 unsigned char 的向量在读取后立即被破坏,fread 也会非常快。

在我看来,某些东西(Windows 或磁盘)缓存了文件,因此 freads 非常快。我没有读过任何关于这种行为的信息,所以我不确定是什么真正导致了这种情况。

如果我在 1 小时左右没有使用我的应用程序然后再次执行 fread,则 fread 很慢。在我看来,缓存被清空了。

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

内存映射文件理论上可行,但文件本身太大,所以我不能使用它。

4

1 回答 1

2

90/10 法

计算机程序 90% 的执行时间用于执行 10% 的代码

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

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

总而言之,你是对的,有缓存,但我不能说,因为我不在微软工作,这真的在发生......


还回答了问题的下一部分。文件映射到内存可能是解决方案,但如果文件非常大,机器可能没有太多内存,所以它不是一个选项。但是,您可以使用90/10 法则。在您的情况下,您应该只将文件的一部分映射到内存中(那部分是最重要的),在阅读时您应该制作一个整体参数的数据表。

不知道确切的情况,但它可能会节省。

于 2013-10-11T20:46:59.647 回答