在重新格式化之后,我有一些解析文本文件的代码。
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,代码中断时会出现内存不足的exception.My代码中断
contents = contents + File.ReadAllText(file).Replace(">", ">").Replace("<", "<").Replace(""", "'");我有什么替代方案来做同样的操作,并有效地处理文件。
发布于 2015-04-10 15:46:25
正如已经指出的,关键是使用流而不是完全内存中的操作。
您可以创建一个自定义的TextReader子类FormattingReader,它包装一个StreamReader或类似的内容,并在阅读时动态执行格式化过程:
<root>标记的结束
</root>然后使用接受TextReader并传递FormattingReader实例的XmlReader.Create()重载。
发布于 2015-04-10 14:56:36
您将无法使用XDocument处理超过100MB的文件,因为它将所有内容存储在内存中,并在内存中执行所有操作。为此,请使用XmlReader。
https://stackoverflow.com/questions/29555067
复制相似问题