C# 如何处理XMLDocument对象

C# 如何处理XMLDocument对象,c#,asp.net,xml,sharepoint,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); XmlDoc

我正试图从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

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

改用基于流的读取器:
XmlReader

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

using (XmlReader reader = XmlReader.Create(file)) {
    while (reader.Read()) {
        //Do processing on each 
    }
 }
请注意,这是一个仅向前的读卡器,它不像
XmlDocument
那样直接使用,但缓冲数据将确保不会遇到进一步的内存异常

如果您对用于缓冲的机制感到好奇,那么它是一种幕后的
收益返回
(如果您想深入了解细节,它实际上被编译为
开关盒
)。下面是一篇博客文章,其中有人用文本文件做了类似的事情:


ref:

您的xml文件有多大?您好,我有136个从5MB到18MB不等的xml文件。您的应用程序还占用了哪些内存?主要是这些xml元素;XmlDocument,XmlNodeMind这是一个For循环。如果我声明XmlDocument xdocAwards=newxmldocument(),会有什么不同吗;在for循环之外?