2014-04-01 189 views
0

我试图从如下的对象如何处理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

+0

有多大是你的xml文件? –

+0

嗨,我有136个XML文件从5MB变化到18 MB – SharePointDummy

+0

还有什么占用了存储在你的应用程序? – doctorlove

回答

0

停止使用任何想法处理存储XmlDocument如果内存是一个问题。它一次加载整个文档,这会导致您的问题。

改用基于流的读者:XmlReader

这个对象块了文件到一个缓冲区,而不是加载整个事情。

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

注意这是一个只进阅读器,它不是那样直接为XmlDocument使用,但缓冲你的数据将确保你不会遇到进一步的内存异常。

如果您对用于缓冲的机制感到好奇,那么在后台(它实际上编译为switch case,如果您想回到本质上)是一个yield return。这里,是因为有人做一个文本文件类似博客文章: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