如何解决C#中的OutOfMemory异常?

时间:2017-11-01 07:32:43

标签: c#

我有一些巨大的xml文件,1 + gb。我需要对它们进行一些过滤操作。我提出的最简单的想法是将它们保存为txt和ReadAllText,并开始执行一些操作,如

  var a = File.ReadAllText("file path");
  a = a.Replace("<", "\r\n<");

然而,当我尝试这样做时,程序崩溃了内存。我在运行它时看着我的任务管理器,RAM使用率上升到50%,一旦到达它,程序就会死掉。

有没有人对我如何操作此文件有任何想法,避免OutOfMemory异常或允许程序提取更多的内存。

1 个答案:

答案 0 :(得分:4)

如果您可以逐行执行,而不是使用File.ReadAllText说“将所有内容记录到内存中”,则可以使用File.ReadLines说“按时收取一行”。

这将返回使用延迟执行的IEnumerable。你可以这样做:

using(StreamWriter sw = new StreamWriter(newFilePath))
foreach(var line in File.ReadLines(path))
{
    sw.WriteLine(line.Replace("<", "\r\n<"));
    sw.Flush();
}

如果您想了解有关延迟执行的更多信息,可以查看this github页面。