2009-07-17 50 views
1

這可能是沿着.NET Collections and the Large Object Heap (LOH)大對象堆

.NET中的線,我加載一個字符串,使得〜200KB的文本文檔時,XML轉換爲base64一個XmlDocument。問題是,字符串應該分配給大對象堆。從這裏的閱讀比較中我知道XmlReader是讀取字符串的最有效的方法,但XmlDocument可能會給我更直接的閱讀和更多的功能(xpath)。

我的XML的每個節點都應該是一個相當小的字符串,沒有前往附近的大型對象堆。使用Lutz .Net Reflector它看起來XmlDocument在內部使用鏈接節點。

所以最後,我的問題:請問加載此字符串保存〜200 KB(> 85000個字節)使用XmlDocument的時候引起的又一目的爲蕙。我們有點擔心分割堆並導致OOM錯誤。或者XmlDocument恰好發生(至少對於我詢問的數據的情況)會在託管堆上創建大量對象?

回答

1

你爲什麼加載XML轉換成字符串開始嗎?數據來自哪裏?你不能傳遞(如StreamTextReader)直接進入XmlDocument開始嗎?

+0

該字符串來自數據庫。我們正在Microsoft Dynamics平臺之上構建一個垂直市場應用程序,因此使用其他類型的數據庫字段對我來說不是一種選擇。 – 2009-07-17 20:29:55

3

它是大於85 KB的是,在大型物體結束堆連續數據的唯一對象。例如大型字符串和數萬個元素的數組。

一個XmlDocument由很多小物件,所以對大對象堆就會很少分配任何東西。唯一的機會是如果一個節點包含數十個孩子,或者如果一個值超過42500個字符。