在我的Windows Mobile(.NET Compact Framework)應用程序中,我使用大數組來存儲應用程序的主數據。這是潛在數百個對象的數據集。每個對象都有大約10個屬性和兩個自己的數組,每個對象都有大約25個其他對象,每個對象都有大約5個屬性。數組序列化性能問題
要將此陣列保存在移動設備上,我只需序列化整個陣列。這在大多數情況下都很有效,而且非常非常簡單。
但是在我們的測試案例中,我們一直只使用少數幾個對象,最多隻能使用50到75個。但是我們的客戶已經有用戶擁有數百個對象的情況,最多可達1000個。在這些情況下,序列化很慢,可能需要一分鐘。
實際的問題是保存整個數組時,大多數情況下只有幾個對象實際發生了變化。所以基本流程是這樣的:
- 從存儲裝載整個數組,比如400個對象;
- 更改1個對象的一些屬性;
- 將整個數組保存回存儲空間,完整的400個對象;
- 更改同一對象的更多屬性;
- 再次保存
- 更改最終屬性;
- 再次保存;
- 同樣的,任何後續對象...
如果沒有發生儲蓄往往這不會是一個問題正常,但在幾個中間步驟的數據被保存。這是爲了確保所有的數據都是持久的,並且不會發生數據丟失(例如電池耗盡時)。
我該如何解決這個問題?
我對Windows Mobile並不熟悉,但對於通常從設備傳輸/傳出設備的「移動設備」來說,性能確實非常重要。我會調整你的代碼,使你只發送/接收改變的數據。例如在你的例子中,一次只發送「幾個屬性」。 (請記住,數據傳輸通常會花費最終用戶$ money - 因此您希望它儘可能小) – scunliffe 2010-10-01 10:25:46
數據傳輸沒有問題。傳輸速度足夠快(通常在通訊座使用Wifi或「直接」連接)。但是序列化到內部(永久)存儲器(閃存或SD卡或其他任何東西)是很慢的。 – pbean 2010-10-01 10:45:41
好的,但我認爲這個問題再次涉及到多少數據被修改。我只會根據需要更新內部數據結構......例如更新索引「X」處的子數組以添加這3個項目。不要嘗試將整個結構發送回設備並重新構建整個數據結構。 – scunliffe 2010-10-01 11:56:04