2011-03-22 109 views
0

我有以下代碼:類型 'System.OutOfMemoryException的' 未處理的異常發生在system.xml.dll的

XmlTextReader DBLPReader = new XmlTextReader("dblp.xml"); 

// Load the source of the XML file into an XmlDocument 
XmlDocument DBLPDoc = new XmlDocument(); 

// Load the source XML file into the first document 
DBLPDoc.Load(DBLPReader); 

// Close the reader 
DBLPReader.Close();` 

其中dblp有大約800 MB。

我,說:「類型‘System.OutOfMemoryException的’未處理的異常發生在system.xml.dll的」

什麼是在這種情況下,解決方案的錯誤?

回答

0

取決於你想實現什麼,您的解決方案可能是:

  • 使用SAX解析器。
  • 使用64位機器。
  • 請勿嘗試加載如此大的文件。
  • 縮小文件(例如,消除空格或註釋,縮短標籤名稱)。
  • 抓住異常並正確處理。
+0

你的意思是說SAX比DOM好。我在C#中工作 – Dena 2011-03-22 06:21:20

+0

SAX本身並不一定比DOM好。在使用一種樣式的XML解析方法時,存在權衡。也就是說,SAX風格的解析器往往更快,更輕量級(如果使用起來更復雜一點)。 – paulcam 2011-03-22 07:59:32

+0

SAX在這種情況下可能會更好,因爲您可以避免DOM的所有內存開銷(這顯然是問題),並僅存儲需要從文件中提取的數據。 – Gabe 2011-03-22 09:07:59

0

如果你打算搞亂那些大小的XML文件,你應該考慮使用System.Xml.XmlTextReader。有一個列表,它會給你帶來什麼here,以及如何使用它的體面教程here

+1

其實..我正在使用XMLTextReader,你可以看到,但是有沒有其他的編碼方式,我可以使用XMLTextReader,可以幫助..關於 – Dena 2011-03-22 06:26:40

+0

@Dena,只使用XmlReader/XmlTextReader,永遠不會將它加載到XmlDocument中。 – sisve 2011-03-22 06:58:04

+0

謝謝@Simon - 這就是我的意思。 @Dena:XmlDocument讀取整個XML文件,並在內存中構建一個可以編碼的DOM樹。即使你認爲他們有一些可笑的高效內存開銷,它仍然會至少和原始文件一樣大(這可能很慷慨)。我會從我提到的教程開始:) – paulcam 2011-03-22 08:02:45

0

在64位機器上運行,並設置您的構建屬性以定位到x64平臺。

相關問題