(这不是我的计划,但我会尽力提供所有相关信息。)
有一个程序可以读取大小约为300MB的二进制文件,处理它们并输出一些信息。该程序使用ifstream进行文件输入,并为每次读取正确初始化和关闭流。
程序必须多次读取每个文件。第一次读取文件大约需要3秒钟,每次连续读取大约需要0.1秒。如果处理了多个文件,返回第一个文件仍然会产生快速读取速度,但一段时间后重新读取文件会变慢。
此外,如果将文件复制到另一个位置,则第一次读取新文件的速度大约为0.1秒。
如果进行数学计算,连续读取的速度大致是硬盘驱动器的公布读取速度。
所有这些看起来都是由操作系统或硬盘驱动器缓存文件位置,因此在连续读取时,您不必寻找文件位置。
是否有人知道究竟是什么导致初始读取速度减慢,以及是否可以阻止?三秒钟可能看起来不是很多,但它们会为正确处理每个文件所需的总时间增加约5小时。
此外,该程序在Fedora 14和Scientific Linux上运行,两个操作系统都有默认文件系统。
任何想法都会受到赞赏。
答案 0 :(得分:2)
Linux将尝试将文件复制到RAM中以使下一次读取更快 - 我猜这就是发生的事情。初始读取实际为磁盘 - 后续读取超出文件高速缓存,因为整个文件已复制到RAM
答案 1 :(得分:1)
操作系统(Linux)具有磁盘缓存。在您读取文件一次后,它就在缓存中。
答案 2 :(得分:0)
我的猜测是,它可能是第一次读取文件需要更长时间,因为它会将一些信息加载到缓存中?
第一次之后,它只使用缓存中的一些信息。
答案 3 :(得分:0)