2012-10-16 43 views
2

我有一個類處理XML文件。它有效,但問題是,所有內容都在RAM中處理。我需要做一些事情(例如使用XmlWriter類),以便在創建新的XML文件時保存在HDD上(數據非常大,這就是爲什麼)。保存XDocument而不將其存儲在內存中

如何以最好的方式做到這一點?我希望沒有必要將XDocument更改爲XmlDocument:/

例如, - 我有類似下面XML結構,我想添加一個節點,將其保存到文件中,配置元素,然後創建一個新的節點,將它保存...等

<root> 
    <element no='1' /> 
    <element no='2' /> 
    <element no='3' /> 
    <element no='4' /> 
</root> 
+1

爲什麼不把它渲染成一個字符串,然後寫入字符串?您已經在內存中獲得了XDocument,這是內存密集型位。如果您確實想避免構建XDocument的內存中字符串表示形式,請使用由文件支持的流。 – Sean

回答

2

我還沒有完成這件事自己,但this article應該幫助,是的,你可以繼續使用XDocument。

從文章:

第二個改進是LINQ到XML的合併文檔接近的XmlReader方法的能力。使用靜態方法XNode.ReadFrom(它接受XmlReader並返回讀者當前位置的XNode對象),我們可以逐個創建XNode元素,並根據需要對它們進行處理。您仍然沒有將整個文檔加載到內存中,但您可以輕鬆使用文檔。

在文章中筆者談到閱讀從文檔,而你在談論寫作。然而,我認爲這裏的關鍵是,它也有一個方法(huzzah!)。

0

可以保存通過的XmlWriter的XDocument:

using (var xw = XmlWriter.Create(...)) 
{ 
    var xDoc = new XDocument(...); 
    xDoc.Save(xw); 
} 
+0

但它不能解決我的問題。在你的解決方案中,當我想添加一個新元素時,我需要將它加載到'RAM'中:/ – Nickon

-1

你可以使用保存方法,請參閱msdn

+1

請仔細閱讀我的文章... – Nickon

相關問題