Windows C ++锁定文件在内存中

时间:2013-10-11 19:57:34

标签: c++ windows caching filesystems fread

如果我需要经常读取文件,并且我将使用fread将文件加载到unsigned char的向量中,则后续fread非常快,即使unsigned char的向量在读取后立即销毁。 / p>

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

如果我不使用我的应用程序1小时左右然后再做一次畏惧,那么恐惧就会很慢。 在我看来,缓存已被清空。

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

内存映射文件理论上有效,但文件本身太大,所以我无法使用它。

1 个答案:

答案 0 :(得分:2)

90/10法律

  

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

这不是一个规则,但通常是这样,因此很多程序会尽可能地保留最新数据,因为很可能很快就会访问这些数据。

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

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


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

不知道具体情况,但可能会保存。