在进行一些重新格式化之后,我有一些代码来解析文本文件。
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(""", "'");
我需要有哪些替代方法才能通过有效的文件处理执行相同的操作。
答案 0 :(得分:2)
正如已经指出的,关键是使用流而不是完整的内存操作。
您可以创建一个自定义TextReader
子类FormattingReader
,它包装StreamReader
或类似内容,并在阅读时动态执行您的格式化过程:
<root>
代码<
或>
时,请改为输出斜角</event>
标记时,请将其视为文件末尾</root>
然后使用TextReader
的{{3}}重载并传递FormattingReader
的实例。
答案 1 :(得分:1)
您无法使用XDocument处理超过100 MB的文件,因为它将所有内容存储在内存中并执行内存中的所有操作。为此目的使用XmlReader。