總而言之,我有一個應用程序,它接收一組輸入文件,從數據生成一個樹,然後將其作爲XML寫入文本文件。構建並導出內存有限的非常大的樹形結構
目前,整個樹在寫出之前就被存儲在內存中,因爲在解析過程中,我們需要引用樹上的任意節點來獲取或更新其值。
當樹變得太大而無法將其全部存儲在內存中時,就會出現我們面臨的問題。樹本身非常平坦,只有4-6層的深度。它看起來是這樣的
Root
Group
Record
Data
Data
Record
Data
Data
Data
...
...
Group
Record
...
總是會有一個Root
節點,每個節點只有一個類型的孩子。但是,對節點添加到其他節點的方式沒有任何順序:根據數據的格式化方式,可以將記錄添加到不同的組,並且可以將數據添加到不同的記錄(而不是爲一個記錄創建一個記錄組,然後移動到另一個)
我的第一個建議是在我們的機器上丟掉更多的內存。我們在64位Windows機器上運行該工具,所以如果我們內存不足,那麼我們只需要獲得更多內存。但是這個建議沒有采取。
我接下來的想法是每當樹佔用內存空間太多時寫出節點,但因爲可以隨時將數據添加到特定記錄,因此很難確定實際完成時間有記錄或沒有記錄。特別是如果我們需要引用記錄,並且它已經被寫出。
還有其他幾個選項,例如優化樹的設計方式(因爲每個節點佔用相當大的內存),但是對於這個問題,我想知道構建和導出大型樹的技巧。
如果它太大而不適合內存,爲什麼要將它輸出到單個XML文件?這本質上並不是一個壞的方法,但它看起來似乎是錯誤的工具。 –