如果我们取一个特定大小的文件,哪个操作会执行得更快?读取全部内容或将内容写入文件。性能是否对打开文件的模式有任何依赖性。
问问题
2012 次
2 回答
2
于 2013-05-27T11:03:09.467 回答
1
我有点惊讶,因为如果阅读速度更快(反之亦然) ,如果你必须写它并没有帮助,这个问题就没有什么意义了。无论如何,你必须做你必须做的事情。
也就是说,写作通常比较慢。我说“通常”是因为你不一定能直接看到读写速度。
C++ 中的读取和写入在应用程序级别进行缓冲,并且(通常)再次在操作系统级别进行缓冲。因此,您看到的“写入速度”是指将数据复制到缓冲区并最终将缓冲区刷新到操作系统的速度。
撇开这种诡辩不谈,写作(通常)比阅读慢,因为这是设备的工作方式。硬盘只能写入完整的集群,而固态硬盘只能写入整组集群(通常在 512kiB 左右)。这意味着定期写入涉及读取先前写入数据的完整“单元”,修改它,然后写回整个单元。此外,可能(在某些设备上)需要重新读取数据以确保已成功写入。这显然必须比阅读慢。
请注意,操作系统在很大程度上合并了写入,因为写入通常由虚拟内存子系统延迟执行,除非您明确要求同步。读取也是如此,因为虚拟内存系统通常会预先设置大量数据(通常约为 64-128kiB)。
因此,除非您的读/写量很大,否则您看到的任何时间都不对应于实际的读/写时间。
于 2013-05-27T13:10:33.510 回答