2011-01-25 57 views
0

我想使用強大的DataContractSerializer將數據寫入或讀取到XML文件。如何在此用例中有效地使用DataContractSerializer?

但作爲我的概念,DataContractSerializer只能讀取或寫入整個結構或結構列表的數據。

我的用例描述如下....我無法弄清楚如何使用此API來優化性能。

我有一個名爲「信息」的結構,並有一個List<Information>與此列表中的元素意外數量。

用戶可能經常更新或添加新元素到此列表中。

根據操作(添加或更新),我必須將列表中的所有元素序列化爲同一個XML文件。

因此,即使它們沒有再次修改爲XML,我也會寫入相同的數據。這沒有意義,但我找不到任何方法來避免發生這種情況。

由於墓碑機制,我必須在10秒內保存所有信息。

我怕性能,並可能使得UI滯後......

我可以使用任何變通方法來部分地更新或添加數據信息轉換DataContractSerializer的XML文件?

回答

0

DataContractSerializer可用於序列化選定的項目 - 您需要做的是提出方案來識別更改的數據以及有效地序列化它的方法。例如,其中一種方式可能是

  1. 您可以將整個結構列表序列化爲文件。
  2. 每當某個對象被添加/更新/從列表中移除時,您將創建一個diff對象,該對象將識別更改類型和對象更改。然後,您可以將此對象序列化爲xml並將xml附加到文件。
  3. 讀取文件時,您可能必須應用類似的邏輯,首先閱讀列表,然後開始逐個應用差異。
  4. 因爲你想連續追加到文件中,所以你的文件中不應該有根元素。換句話說,帶有diff信息的文件不會是有效的xml文檔。它將包含一系列xml片段。要閱讀它,你必須將這些片段放在一個xml聲明和根元素中。
  5. 您可能會使用一些後臺任務來定期寫入整個列表以生成有效的xml文件。此時,您可能會放棄您的差異文件。想法是模仿交易系統 - 一個數據結構具有序列化/保存的信息,然後是另一個包含變化的結構(類似於事務日誌)。
0

如果性能是一個問題,那麼使用除DataContractSerializer之外的其他方法。

有選項在 http://blogs.claritycon.com/kevinmarshall/2010/11/03/wp7-serialization-comparison/

比較不錯。如果列表的大小是一個問題,你可以嘗試分解成較小的列表。最合適的做法取決於列表中的數據和典型的使用/編輯/添加模式。

根據數據更改的頻率,您可以嘗試每當更改時保存它。這將消除將其保存在可用於停用的時間的需要。