簡體   English   中英

WP7上的JSON序列化性能問題

[英]JSON serialization performance issue on WP7

我有一個約有的.JSON文件。 1.5MB大小包含大約1500個JSON對象,我想在我的應用程序啟動時將其轉換為域對象。

目前我在手機上的過程(不在我的開發PC上)需要大約23秒,這對我來說太慢了,並且迫使我將對象列表寫入ApplicationSettings這樣我每次加載應用程序時都不必這樣做(只是第一次關閉),但即使這需要15多秒寫入,16秒讀取,所有這些都不夠好。

我沒有很多序列化經驗,我真的不知道完成它的最快方法。

目前,我正在使用System.Runtime.Serialization命名空間與DataContractDataMember方法。

有關此類數據加載的任何關於性能的想法?

我發現Json.NET庫的性能更高,並且有更好的標准json序列化器選項。

我在我的應用程序中遇到的一個性能問題是我的域對象實現了INotifyPropertyChanged,其代碼支持將事件調度回UI線程。 由於反序列化代碼填充了這些屬性,我正在進行大量的線程編組,而不需要在那里。 在反序列化期間刪除通知大大提高了性能。

更新:我使用的是Caliburn Micro,它具有PropertyChangedBase屬性,可以關閉屬性更改通知。 然后我添加了以下內容:

[OnDeserializing]
public void OnDeserializing(StreamingContext context)
{
    IsNotifying = false;
}

[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
    IsNotifying = true;
}

嘗試使用免費的EQATEC Profiler for WP7分析您的應用程序。 真正的問題可能是一些完全出乎意料且容易修復的問題,比如INgelifyPropertyChanged-example Nigel提到的。

您可以使用應用程序設置快速射擊自己。 問題是它們總是“批量”序列化/反序列化並加載到內存中,所以除非你的對象非常小,否則會導致內存和性能問題。

我仍然想知道需要1500個物體。 你真的需要1500個整個對象,如果是這樣,為什么 - 最終手機向用戶展示了一些東西,沒有用戶可以同時處理1500位信息。 他們只能處理所呈現的信息,不是嗎? 那么您可以顯示對象的可能部分,並等待以后加載其他部分嗎? 例如,如果我有2000個聯系人,我將永遠不會加載2000個聯系人。 我可能加載2000個名稱,讓用戶過濾/排序名稱,然后當他們選擇一個名稱加載聯系人。

我建議將此序列化為隔離存儲作為文件。 內置的JSON序列化程序在磁盤上占用的空間最小,性能也很好。

是一篇關於序列化的文章。 使用二進制或Json.Net。

存儲/恢復到ApplicationSettings也將涉及序列化(非常確定它是Xml)所以我認為你不會比你看到的16秒更快。

無論deerializer有多好,移動那些數據都不會很快。 我的建議是看看為什么要存儲那么多對象。 如果您無法減少需要存儲的對象集,請將它們分解為邏輯組,以便您可以按需加載而不是預先加載。

您是否嘗試過使用多個較小的文件並[並]並行序列化以查看是否會更快?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM