我正在编写一个解析大型、不可预测的文件的程序。这部分没有问题。我一直在使用下面的代码,循环读取 ReadLine 直到文档结束,以保持低内存占用。我的问题是OutOfMemoryException
当一行太长时。
System.IO.StreamReader casereader = new System.IO.StreamReader(dumplocation);
string line;
while ((line = casereader.ReadLine()) != null)
{
foreach (Match m in linkParser.Matches(line))
{
Console.Write(displaytext);
Console.WriteLine(m.Value);
XMLWrite.Start(m.Value, displaytext, dumplocation, line);
}
}
XMLWrite 只是将任何与我的正则表达式函数匹配的字符串写入 XML 文档。Regex 函数是一个简单的电子邮件搜索。当调用 ReadLine 并且应用程序在我正在阅读的文件中发现一个非常长的行时会出现问题(我可以看到这是因为任务管理器中的内存使用量在填充字符串“line”时不断攀升)。最终它会耗尽内存并崩溃。我想要做的是读取预定义的块(例如 8,000 个字符),然后通过相同的过程一次运行这些块。这意味着我将始终知道字符串行的长度(8,000 个字符)并且不应该接收和内存不足异常。我的逻辑看起来合乎逻辑吗!?我正在寻找实现 ReadBlock 的最佳方法,因为目前我无法让它工作。
非常感谢任何帮助!