距离vs lseek操作的数量

时间:2012-12-27 18:09:55

标签: c++ performance io

例如,我有一个大小为N的文件,我执行M lseek操作。 什么会影响性能,搜索操作次数或总距离?

2 个答案:

答案 0 :(得分:3)

这实际上取决于文件的大小以及搜索次数。当然,每次寻求都需要一些时间。但是如果搜索实际上导致磁盘上的读头移动,那么我们正在谈论下一次读取完成所需的额外毫秒(还要注意它是在受影响的搜索之后的读取或写入操作,搜索本身只更新代表文件本身的内部数据结构中的一些数字。它还会对“预读”的效率产生连锁反应。

为此,我们说的是电话目录大小的文件,而不是几百KB的文件,因为这些文件几乎肯定会在第一次读取操作时被缓存。

即使您按顺序阅读,“移动头部”也会明显发生,如果磁盘(严重)碎片化,您可能会在不使用搜索操作的情况下进行大量的移动操作。

答案 1 :(得分:1)

如果你只是按顺序阅读文件,它会比偶尔寻找文件快得多。寻道要么杀死流的缓冲区,要么需要相当复杂的逻辑来检测它们不会杀死流的缓冲区。在任何一种情况下,寻求都相当缓慢。如果MN相比较小,则可能无关紧要。如果M很大(例如N / 100 < M),则搜索可能会对性能产生重大影响。我试图避开它们,但要确定你必须要测量它。