【发布时间】:2017-10-06 10:46:01
【问题描述】:
我正在处理一个大型 XML 文件,并且在运行应用程序时,XmlTextReader.ReadOuterXml() 方法正在引发内存异常。
代码行就像,
XmlTextReader xr = null;
try
{
xr = new XmlTextReader(fileName);
while (xr.Read() && success)
{
if (xr.NodeType != XmlNodeType.Element)
continue;
switch (xr.Name)
{
case "A":
var xml = xr.ReadOuterXml();
var n = GetDetails(xml);
break;
}
}
}
catch (Exception ex)
{
//Do stuff
}
使用:
private int GetDetails (string xml)
{
var rootNode = XDocument.Parse(xml);
var xnodes = rootNode.XPathSelectElements("//A/B").ToList();
//Then working on list of nodes
}
现在在加载 XML 文件时,应用程序在 xr.ReadOuterXml() 行上抛出异常。可以做些什么来避免这种情况? XML 的大小几乎为 1 GB。
【问题讨论】:
-
我们在这里讨论的 XML 文件的大小是多少?
-
只是加载的 xml 的大小太大。您可以考虑使用
GetDetails的迭代器和产生结果,这会保持低内存。 -
嗨@Flater,XML 的大小几乎是 1 GB
-
嗨@Fabio,是的,我可以使用迭代器,但这会影响我认为的性能
-
编程总是在速度/性能和内存大小之间进行权衡。你需要选择一个