14

Androidエミュレーターでオブジェクトマッピングを行うためにgsonを使用しようとしています。

208 kb 前後の json データを処理すると、途方もなく遅くなります。私のjsonには階層がありません。

オブジェクト マッピングが完了すると、gson が約 500 レコードを作成したことがわかります。

Androidエミュレーターで入力jsonをマップするのに3分以上かかります。

文字列といくつかのフロートで構成されるエンティティに注釈を付けました。

何か足りない?

任意のアイデア、ベスト プラクティスが大いに役立ちます。

JSONデータをすばやくオブジェクトマッピングする方法はありますか?

        URL myURL = new URL(url);
        /* Open a connection to that URL. */
        URLConnection ucon = myURL.openConnection();
        /*
         * Define InputStreams to read from the URLConnection.
         */
        InputStream is = ucon.getInputStream();
        InputStreamReader reader = new InputStreamReader(is);
        long tickCount = System.currentTimeMillis();
        Policy[] policies = new Gson().fromJson(reader, Policy[].class);
        long endCount = System.currentTimeMillis() - tickCount;
        Log.d("Time to pull policies in milliseconds", "" + endCount);
4

5 に答える 5

5

このような質問が以前に出てきたのを見たことがありますが、一般的なコンセンサスは、Jacksonが Gson よりもはるかに高速であるということです。詳細については、次のリンクを参照してください。

Android について具体的に説明しているものは次のとおりです: http://ubikapps.net/?p=525

于 2010-07-16T00:24:19.497 に答える
4

GSON ストリーミング パーサーと Gson オブジェクトを混在させてみましたか? http://sites.google.com/site/gson/streaming (混合読み取りの例を探してください)。

Gson は解析ツリー全体を読み込んでからそれに基づいて動作するため、このアプローチが役立つ場合があります。配列リストが大きい場合、すべての要素を読み取って解析しようとすると、大量のメモリ スワップ (またはスラッシング) が発生する可能性があります。このアプローチは、一度に 1 つの要素を読み込みます。

お役に立てれば。

于 2011-04-25T21:50:41.397 に答える
2

それを素敵な大きなバッファでラップすると、おそらくパフォーマンスが向上しますInputStream...BufferedInputStream

3分はやばい。エミュレーターを実行することはめったにありませんが、約 1.1MB の JSON アセットを含むアプリがあり、ハードウェアでの読み込みと処理に約 5 秒かかります。

(これはまだ長すぎますが、それでも)。

于 2011-02-15T22:34:06.173 に答える
1

必要のないJSONのすべての要素をモデル化しないことで、gson.fromJSONをかなり高速化できることがわかりました。GSONは、応答クラスで指定されたものだけを喜んで入力します。

于 2013-02-20T15:56:26.390 に答える