C#内存映射文件 - 更好地按顺序读取或写入?

时间:2015-03-22 16:57:43

标签: c# memory-mapping

我有两个大约 50GB 的文件:一个输入和一个输出文件。 我正在使用内存映射文件来管理这两个文件。

输入文件包含 3 数百万个网页,在我确定排列 π之后他们,我必须以新的顺序将输出文件写入网页。

因此,我可以选择顺序 输入文件,并在输出<的不同位置中编写网页/ em>文件,相应于排列 π
或者我也可以这样做:根据排列 π 随机 输入文件并写入顺序进入输出文件。

哪个选项更快?为什么呢?

1 个答案:

答案 0 :(得分:1)

TL; DR:由于缓存,所有文件追加操作都是顺序的。即使对文件中间的写入也将按电梯分类并以块大小等方式执行。

随机写作往往比随机阅读更快,原因如下:

  1. 当文件增长时,文件系统可以选择放置新块的位置。
  2. 写入不必立即执行,写缓冲区可以确保一次写入整个块,这意味着数据不会被添加到已有位置的现有块中。
  3. 在阅读完成之前,您的处理无法进行。阅读依赖于预测缓存。操作系统擅长预缓存顺序读取,对于随机读取非常糟糕。如果您的读取数量小于块大小,则情况会更糟 - 从磁盘读取的实际数据量将大于文件的大小。