如何释放 XMLDocument 对象

本文关键字:XMLDocument 对象 释放 何释放 | 更新日期: 2023-09-27 17:55:59

我正在尝试从 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");
}

关于如何从这个对象上处理内存的任何想法,因为这给了我一个内存不足异常

如何释放 XMLDocument 对象

如果内存是一个问题,请停止使用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