如何配置XMLDocument对象

时间:2014-04-01 11:09:20

标签: c# asp.net xml sharepoint

我正在尝试从XmlDocument对象中释放内存

using (XmlNodeReader xnrAwards = new XmlNodeReader(ndListItems))
{
    ndListItems.InnerXml = ndListItems.InnerXml.Replace("_x002e_", "_").Replace("ows_", "");
    dsAward.ReadXml(xnrAwards, XmlReadMode.ReadSchema);
    XmlDocument xdocAwards = new XmlDocument();
    xdocAwards.LoadXml(ndListItems.OuterXml);
    xdocAwards.Save(ABCListName + "_XML.xml");
}

关于如何处理此对象的内存的任何想法,因为这给了我一个outofmemoryexception

1 个答案:

答案 0 :(得分:0)

如果关注内存,请停止使用XmlDocument。它会立即加载整个文档,这会导致您的问题。

使用基于流的阅读器:XmlReader

此对象将文件分块放入缓冲区而不是加载整个文件。

using (XmlReader reader = XmlReader.Create(file)) {
    while (reader.Read()) {
        //Do processing on each 
    }
 }

请注意,这是一个仅向前阅读器,并不像XmlDocument那样直接使用,但缓存数据可确保您不会遇到更多内存异常。

如果您对用于缓冲的机制感到好奇,那么它是幕后的yield return(如果您想要进入,则实际编译为switch case事实真相)。以下是某人使用文字文件执行类似操作的博文:http://jamesmccaffrey.wordpress.com/2011/02/04/processing-a-text-file-with-the-c-yield-return-pattern/

参考:http://msdn.microsoft.com/en-us/library/vstudio/system.xml.xmlreader