如何在.NET中读取大型(1GB)txt文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我有一个1GB的文本文件,我需要逐行读取。做这件事最好和最快的方法是什么?

private void ReadTxtFile()
{            
    string filePath = string.Empty;
    filePath = openFileDialog1.FileName;
    if (string.IsNullOrEmpty(filePath))
    {
        using (StreamReader sr = new StreamReader(filePath))
        {
            String line;
            while ((line = sr.ReadLine()) != null)
            {
                FormatData(line);                        
            }
        }
    }
}

FormatData()我检查行的起始字,它必须与一个字相匹配,并且基于这个增量,一个整数变量。

void FormatData(string line)
{
    if (line.StartWith(word))
    {
        globalIntVariable++;
    }
}
提问于
用户回答回答于

如果您正在使用.NET 4.0,请尝试MemyMempdFile这是为这个场景设计的类。

你可以用StreamReader.ReadLine否则。

用户回答回答于

使用StreamReader可能是一种方法,因为不希望整个文件同时存在于内存中。MemoryMempdFile比顺序读取更适合随机访问(它是顺序读取的10倍,内存映射是随机访问的10倍)。

还可以尝试从filestream创建流读取器,并将FileOptions设置为SequentialScan(参见FileOptions枚举),但我怀疑这会有多大的区别。

但是,有一些方法可以使示例更有效,因为在读取的循环中执行格式设置。在浪费时钟周期,所以如果想要更高的性能,最好使用多线程异步解决方案,其中一个线程读取数据,另一个线程在可用时对其进行格式化。查看符合需要的BlockingCollege:

如果想获得最快的性能,根据我的经验,唯一的方法是按顺序读取尽可能大的二进制数据块,并并行地反序列化它,但此时代码开始变得复杂起来。

扫码关注云+社区