【发布时间】:2011-10-22 06:54:26
【问题描述】:
我正在尝试阅读一些文本文件(每个大约 300 kb)。到目前为止,我一直在使用 Filestream 打开文件并阅读它。 (制表符分隔)。但是,我听说过 .net 4.0 中的内存映射文件。它会让我的阅读速度更快吗?
是否有任何示例代码可以读取简单文件并比较性能?
【问题讨论】:
我正在尝试阅读一些文本文件(每个大约 300 kb)。到目前为止,我一直在使用 Filestream 打开文件并阅读它。 (制表符分隔)。但是,我听说过 .net 4.0 中的内存映射文件。它会让我的阅读速度更快吗?
是否有任何示例代码可以读取简单文件并比较性能?
【问题讨论】:
如果文件在磁盘上并且只需要读入内存,那么使用内存映射文件将毫无帮助,因为您仍然需要从磁盘读取它们。
如果你所做的只是读取文件,那么内存映射就没有意义了。
Memory mapped files 用于对文件进行密集工作(读取、写入、更改)并希望避免磁盘 IO。
【讨论】:
如果您只是阅读一次,那么内存映射文件没有意义;从磁盘加载数据仍然需要相同的时间。当必须对文件执行许多随机读取和/或写入时,内存映射文件非常出色,因为不需要通过查找操作中断读取或写入操作。
【讨论】:
使用 您的 数据量,MMF 没有任何优势。但是,一般来说,如果有人费心进行测试,他会发现,使用 MMF 复制大(巨大)文件比顺序调用 ReadFile/WriteFile 更快。这是由 Windows 内部用于 MMF 管理和文件 IO 的不同机制引起的。
【讨论】:
在内存中处理数据总是比通过磁盘 IO 执行类似操作更快。如果您的处理是顺序的并且很容易放入内存中,您可以使用File.ReadLines() 逐行获取数据并快速处理它们,而不会产生硬内存开销。这里示例:How to open a large text file in C#
也检查这个答案:When to use memory-mapped files?
【讨论】:
不推荐使用内存映射文件读取文本文件。要读取文本文件,您正在使用 Filestream。 MMP 最好读取二进制数据。
【讨论】: