2017-02-16 1 views
3

私たちはNewtonsoft.Jsonをアプリケーションのどこに使っても大好きです!しかし、私たちは最近、アプリケーションの起動時間を最適化したいと考えていました。いくつかのJSONを逆シリアル化すると、最初は約800ms〜1秒の巨大な遅延があります。 JsonConver.DeserializeObject()または新しいJsonSerializer()を使用するかどうかは関係ありません。遅れは常に目立ちます。Xamarin.AndroidでJson.Netを最初に使用すると遅くなります

私はここに小さなレポケースを作った:これはXamarin.Androidにとても遅いですなぜhttps://github.com/monostefan/json.net_android_slow_start

誰もが知っていますか?おそらく回避策がありますか?ユーザーの皆様の

+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の任意のオブジェクトのシリアル化/逆シリアル化での最初の使用は許容できないほど遅くなりますが、同様のタイプのオブジェクトに対する後続の操作は高速です。バージョン8.0.3では、現在のXamarin.Androidプロジェクトで初めてのパフォーマンス上のペナルティはありません。

関連する問題