如何从c#中的文本文件中获取某些行?

ere*_*rez 3 c# string file

我在C#工作,我有一个大文本文件(75MB)我想保存与正则表达式匹配的行

我尝试使用streamreader和ReadToEnd读取文件,但它需要400MB的内存

并在再次使用时创建内存不足异常.

然后我尝试使用File.ReadAllLines():

string[] lines = File.ReadAllLines("file");

StringBuilder specialLines = new StringBuilder();


foreach (string line in lines)

 if (match reg exp)

  specialLines.append(line);
Run Code Online (Sandbox Code Playgroud)

这一切都很棒,但是当我的函数结束时,所采用的内存并没有清除,只留下300MB的已用内存,只有在调用函数并执行行时:string [] lines = File.ReadAllLines("file"); 我看到内存清理为50MB给予或接受然后重新分配回200MB

如何清除此内存或以不同的方式获取我需要的行?

eol*_*dre 6

        var file = File.OpenRead("myfile.txt");
        var reader = new StreamReader(file);
        while (!reader.EndOfStream)
        {
            string line = reader.ReadLine();
            //evaluate the line here.
        }
        reader.Dispose();
        file.Dispose();
Run Code Online (Sandbox Code Playgroud)

  • 您不需要自己创建流,StreamReader构造函数可以直接获取文件名.此外,您不应该使用EndOfStream来检查您是否在文件的末尾:由于StreamReader正在缓冲数据,因此在StreamReader返回所有行之前,流位置可能就在最后 (3认同)