使用C第二次读取相同文件时的性能差异极大

时间:2016-12-14 14:59:55

标签: c++ c

我必须从C ++程序中的大(2GB)二进制文件中读取二进制数据到char数组中。当我第一次从我的SSD读取文件时,每个文件的读取大约需要6.4秒。但是当再次运行相同的代码或者甚至在运行不同的虚拟程序之后(之前几乎完全相同),下一个读取每个文件只需要大约1.4秒。 Windows任务管理器甚至在第二次,第三次,第四次运行时显示的磁盘活动少得多。所以,我的猜测是Window的文件缓存让我免于等待来自SSD的数据,在另一次填充阵列时。

在客户运行软件之前,是否有任何干净的选项可以将文件读入文件缓存?有没有更好的选择,而不仅仅是已经提前加载文件?我怎样才能确定,数据保留在文件高速缓存中,直到我需要它为止?

或者我的文件缓存假设完全错了?这些不同的加载时间是否有另一个(更好的)解释?

1 个答案:

答案 0 :(得分:1)

受过教育的猜测: 您很可能对文件缓存假设是正确的。

您可以在用户运行软件之前预先加载文件吗? 不是直接的。你的程序将如何知道它将在接下来的几分钟内运行?

所以你可能需要一个辅助机制或技巧。 我在这里看到的选项是:

  • 索引机制,可以更快,更好地对您的数据进行目标访问。如果您一次只需要来自这些数据的小块信息,这将非常有用。
  • 尝试并行加载数据,因此即使它没有真正变得更快,用户也会有这样的印象,因为他可以开始使用他拥有的数据,而其余部分则在后台获取。
  • 有一个帮助工具启动操作系统并预先取出所有内容,因此您需要时已将其存储在内存中。 警告:这会产生严重影响,因为您从一开始就为您的工具预留了大块RAM或甚至SSD缓存(取决于实施)。如果替代方案是启示录,那么只考虑这样做......

您还可以尝试合并前两个选项。更快的数据可用性的关键是找出以什么顺序读取的内容,而不是尝试一次性加载所有内容。 Divide and Conquer.

如果没有关于这个问题的进一步细节,就不可能提供更具体的解决方案。