我必须从C ++程序中的大(2GB)二进制文件中读取二进制数据到char数组中。当我第一次从我的SSD读取文件时,每个文件的读取大约需要6.4秒。但是当再次运行相同的代码或者甚至在运行不同的虚拟程序之后(之前几乎完全相同),下一个读取每个文件只需要大约1.4秒。 Windows任务管理器甚至在第二次,第三次,第四次运行时显示的磁盘活动少得多。所以,我的猜测是Window的文件缓存让我免于等待来自SSD的数据,在另一次填充阵列时。
在客户运行软件之前,是否有任何干净的选项可以将文件读入文件缓存?有没有更好的选择,而不仅仅是已经提前加载文件?我怎样才能确定,数据保留在文件高速缓存中,直到我需要它为止?
或者我的文件缓存假设完全错了?这些不同的加载时间是否有另一个(更好的)解释?
答案 0 :(得分:1)
受过教育的猜测: 您很可能对文件缓存假设是正确的。
您可以在用户运行软件之前预先加载文件吗? 不是直接的。你的程序将如何知道它将在接下来的几分钟内运行?
所以你可能需要一个辅助机制或技巧。 我在这里看到的选项是:
您还可以尝试合并前两个选项。更快的数据可用性的关键是找出以什么顺序读取的内容,而不是尝试一次性加载所有内容。 Divide and Conquer.
如果没有关于这个问题的进一步细节,就不可能提供更具体的解决方案。