2013-08-26 58 views
3

我的任務是加載新的數據集(用XML文件編寫),然後將其與「舊」集(也是XML)進行比較。所有更改都寫入另一個文件。C# - 部分加載XML文件

我的程序將新文件和舊文件加載到兩個數據集中,然後行之後我比較新集和舊集中的主鍵。當我找到相應的行時,我檢查所有字段,如果與舊的不同,我將它寫入第三組,然後將其設置爲文件。

現在我使用:

newDS.ReadXml("data.xml"); 
    oldDS.ReadXml("old.xml"); 

,然後我找到對應的主鍵列和比較等領域。它對小文件非常有用。

問題是我的文件可能有高達4GB左右。如果我的新舊數據很大,則將8GB數據加載到內存中是非常困難的。我想加載我的數據的部分,但爲了比較我需要整個舊數據(或如何獲得具體的行與相應的主鍵從XML文件?)。

另一個問題是我不知道XML文件的結構。它由用戶定義。

使用這樣一個大文件的最佳方式是什麼?我想過使用LINQ to XML,但我不知道它是否有可以幫助解決我的問題的選項。也許離開XML並使用不同的東西會更好?

+1

_「我不知道XML文件的結構,它是由用戶定義的。」_你至少要知道'行'是什麼。 –

+1

文件中的元素是否已排序?如果是的話,您可以通過一次只讀取一個元素的文件使用向前移動的掃描。即使不是,您也可以從一個文件中一次讀取一個元素,並將另一個元素保存在內存中。查找SAX API以獲取有關如何執行此操作的示例。 –

+0

數據是否以任何方式排序? Mkaes有很大的不同。 –

回答

-2

你是絕對正確的,你應該離開XML。對於這樣大小的數據集來說這不是一個好工具,特別是如果數據集由許多具有相同結構的「記錄」組成。不僅4GB文件很笨重,而且幾乎所有用來加載和解析它們的文件都會比文件大小花費更多的內存。

我建議你看看涉及SQL數據庫的解決方案,但我不知道如何分析一個4GB文件,因爲「你不知道文件結構」它由用戶定義「。如果你不理解文件的結構,你認爲'行'和'主鍵'是什麼意思?什麼你知道XML嗎?

這可能是有道理的,例如。讀取一個文件,將主鍵的所有記錄存儲在一定範圍內,對另一個文件執行相同的操作,對數據進行比較,然後繼續。通過對關鍵空間進行分段,確保您總能找到匹配項(如果存在)。以相同的方式將文件分割成更小的塊也是有意義的(雖然我仍然認爲這個大的XML存儲通常是不合適的)。你能多說一點這個問題嗎?

+0

XML是一種很好的格式,特別是在處理不同的數據結構和技術時。 –

+0

該評論甚至意味着什麼? – jwg

+0

-1代表「XML是一種工具」。它不是,它是一種文件格式,它可以互相操作並且易於串行化成另一種格式,可以更快地搜索以回答OP的原始問題。 – Jay