2014-04-01 38 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