0

我编写了一个加载文件的程序,我想知道是否有人可以解释为什么第二次和后续加载文件比首次加载同一文件更快?
例如:
1、第一次加载大文件(500MB)时,比后续加载相同文件的时间要长。第二次加载文件只需要一小部分时间。
即使 RAM 使用率介于两者之间也会出现这种情况(重新启动程序时也会出现这种行为)。

2. 如果我重新启动我的 PC 和/或一段时间后不运行程序或重新加载文件,情况 #1 再次发生。

环境:

  • C++
  • 对比 2010 (MFC)
  • Windows XP 家庭版 32 位
  • 文件加载:我尝试过 fread() 和其他方法,但结果都相似。

感谢您的任何见解。

4

4 回答 4

5

您的操作系统会将文件缓存在未使用的内存中。参见维基百科。这将在重新启动后消失,或者如果您使用大量内存,或者如果您打开更多文件。详细信息因您的操作系统而异。

对于现代计算机体系结构的更广泛的概述, Herb Sutter 的这个演讲很好。

于 2013-03-14T22:10:34.133 回答
1

一种可能的解释是您的硬盘驱动器可能有缓存。第一次读取文件时,您是直接从盘片中读取的。下一次,驱动器可以从缓存中提供它。在延迟(或重新启动)之后,文件的内容不再在缓存中,因此它再次从盘片中提供。

于 2013-03-14T22:10:35.347 回答
1

在现代操作系统中,没有“未使用的内存”之类的东西。那将是完全的浪费。操作系统所做的是将文件、目录结构、文件元数据(例如给定文件的数据在磁盘上的位置)和其他有用数据的副本保存在“未使用的”内存中。

因此,当您读取文件时,它会被加载到内存中。假设有足够的“未使用”内存,该文件确实会在那里放置很长时间。最终它可能会被踢出,因为在您正常使用计算机时,电子邮件软件、网络浏览器、文件内容索引器、杀毒扫描器、网络时间同步器、地址簿到手机同步器以及所有其他背景代码在你的系统中运行,所有这些东西都会消耗一点“未使用”的内存。

所以,是的,文件被缓存了。在具有 4 或 8GB RAM 且未使用所有 RAM 的系统中,一个 500MB 的文件可能会在那里放置几分钟、几小时甚至几天。

于 2013-03-14T23:33:13.000 回答
0

如今,大多数硬盘驱动器都有缓存,因此一旦加载一次,它就在缓存中。您可能不想多次加载文件!

于 2013-03-14T22:10:46.590 回答