2017-02-16 78 views
3

我們在應用程序中使用Newtonsoft.Json所有的地方,喜歡它!然而,我們最近要優化我們的應用程序的啓動時間和測量各種事情,每當我們反序列化JSON一些是第一次,還有的800ms的以1秒一個巨大的滯後發現。如果我們使用JsonConver.DeserializeObject()或新的JsonSerializer(),這並不重要,但第一次總是顯而易見的。Json.Net在第一次使用慢上Xamarin.Android

我在這裏做了一個小的回購情況:https://github.com/monostefan/json.net_android_slow_start

有誰知道這是爲什麼這麼慢上Xamarin.Android?是否有解決方法?

+0

你看過答案[這裏](http://stackoverflow.com/questions/10089347/json-net-slow-serialization-and-deserialization)?嘗試在發佈模式下編譯。 –

+0

還沒有,但是如果我在發佈模式下編譯並不重要。首次反序列化某些東西仍然比後續調用要長。 –

+0

@StefanReinhard你有沒有解決這個問題?我有同樣的問題。謝謝。 – Kyle

回答

1

我高度懷疑這是線程同步的問題。

我有你的代碼的一瞥。用await Task.Run()可能是ContextSynchronization沒有完全發生。我會嘗試很好的舊Task.Factory.StartNew

可否請您嘗試以下。

await Task.Factory.StartNew(
        () => 
        { 
         **/* Perform the service/network call + deserialization here */** 
        } 

       ).ContinueWith(
        t => 
        { 
         //Any thing that you were trying to do in main thread context 
        }, TaskScheduler.FromCurrentSynchronizationContext() 
       ); 
0

嘗試降級Json.NET版本到8.0.3。

我在你的項目https://github.com/monostefan/json.net_android_slow_start嘗試版本8.0.3,並沒有在所有幫助那裏。但值得花費幾分鐘的時間來嘗試,因爲在我的項目中,降級版本通過首次使用Json.NET解決了性能問題。

對我來說,似乎是因爲版本9.0.1 Json.NET的Xamarin.Android表現很爛,但Xamarin.iOS似乎並沒有受到影響。這也適用於最新的Json.NET版本10.0.2。首先在Xamarin.Android中使用任何對象序列化/反序列化,但是對於相似類型對象的後續操作是快速的。在我目前的Xamarin.Android項目中,8.0.3版本沒有首次性能損失。