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