【发布时间】:2015-04-10 06:46:49
【问题描述】:
在重新格式化后,我有一些代码可以解析文本文件。
foreach (string file in Directory.EnumerateFiles(folderPath, "*.*"))
{
contents = contents + File.ReadAllText(file).Replace(">", ">").Replace("<", "<").Replace(""", "'");
pos = contents.LastIndexOf("</event>");
contents = contents.Substring(0, pos + 8);
}
contents = "<?xml version=\"1.0\" encoding=\"utf-8\"?><root>" + contents + "</root>";
XDocument doc = new XDocument();
doc = XDocument.Parse(contents);
文件包含 XML 标记,但格式不正确。因此,我重新格式化并存储在字符串变量 contents 中。该字符串被加载到XDocument 对象中,该程序对小文件(7-10 MB)运行流畅。
现在,有些文件的大小超过 100MB,并且代码因内存不足异常而中断。我的代码在
处中断contents = contents + File.ReadAllText(file).Replace(">", ">").Replace("<", "<").Replace(""", "'");
在高效文件处理的情况下,我必须使用哪些替代方法来执行相同的操作。
【问题讨论】:
-
有人会好奇——如果文件超过 100MB,它真的需要人工可读吗?
-
在您当前的代码中,每个
Replace都会对一个已经很大的内存字符串进行另一个字符串分配,难怪您会耗尽内存。使用流 (StreamReader),分块处理。