我正在使用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);
这很不错,但当我的函数结束时,所占用的内存并没有被清除,留下了 300MB 的已用内存,只有在重新调用函数并执行以下代码段时: string[] lines = File.ReadAllLines("file"); 我才看到内存减少到大约 50MB 左右,然后重新分配回 200MB。
怎么样可以清除这些内存或以不同的方式获取所需行?
FileStream
和StreamReader
对象。 - Matt Brunellusing
块,否则如果在调用 Dispose 之前发生异常,文件将不会被关闭。 - Thomas Levesque