【问题标题】:c# Memory Mapped file Readc# 内存映射文件读取
【发布时间】:2011-10-22 06:54:26
【问题描述】:

我正在尝试阅读一些文本文件(每个大约 300 kb)。到目前为止,我一直在使用 Filestream 打开文件并阅读它。 (制表符分隔)。但是,我听说过 .net 4.0 中的内存映射文件。它会让我的阅读速度更快吗?

是否有任何示例代码可以读取简单文件并比较性能?

【问题讨论】:

    标签: c# memory-mapped-files


    【解决方案1】:

    如果文件在磁盘上并且只需要读入内存,那么使用内存映射文件将毫无帮助,因为您仍然需要从磁盘读取它们。

    如果你所做的只是读取文件,那么内存映射就没有意义了。

    Memory mapped files 用于对文件进行密集工作(读取、写入、更改)并希望避免磁盘 IO。

    【讨论】:

    • 还有当您根本无法将整个文件数据放入内存时。
    【解决方案2】:

    如果您只是阅读一次,那么内存映射文件没有意义;从磁盘加载数据仍然需要相同的时间。当必须对文件执行许多随机读取和/或写入时,内存映射文件非常出色,因为不需要通过查找操作中断读取或写入操作。

    【讨论】:

      【解决方案3】:

      使用 您的 数据量,MMF 没有任何优势。但是,一般来说,如果有人费心进行测试,他会发现,使用 MMF 复制大(巨大)文件比顺序调用 ReadFile/WriteFile 更快。这是由 Windows 内部用于 MMF 管理和文件 IO 的不同机制引起的。

      【讨论】:

        【解决方案4】:

        在内存中处理数据总是比通过磁盘 IO 执行类似操作更快。如果您的处理是顺序的并且很容易放入内存中,您可以使用File.ReadLines() 逐行获取数据并快速处理它们,而不会产生硬内存开销。这里示例:How to open a large text file in C#

        也检查这个答案:When to use memory-mapped files?

        【讨论】:

          【解决方案5】:

          不推荐使用内存映射文件读取文本文件。要读取文本文件,您正在使用 Filestream。 MMP 最好读取二进制数据。

          【讨论】:

            猜你喜欢
            • 2020-11-06
            • 1970-01-01
            • 1970-01-01
            • 2015-09-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-25
            • 2016-12-08
            相关资源
            最近更新 更多