我有一些巨大的xml文件,1 + gb。我需要对它们进行一些过滤操作。我提出的最简单的想法是将它们保存为txt和ReadAllText,并开始执行一些操作,如
var a = File.ReadAllText("file path");
a = a.Replace("<", "\r\n<");
然而,当我尝试这样做时,程序崩溃了内存。我在运行它时看着我的任务管理器,RAM使用率上升到50%,一旦到达它,程序就会死掉。
有没有人对我如何操作此文件有任何想法,避免OutOfMemory异常或允许程序提取更多的内存。
答案 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页面。