[android] JSONのパースにかかる時間
公開日:
:
最終更新日:2013/03/27
android
リストデータなんかを保存したいというのはよくある要件だと思います。
DBは面倒だしカラム毎に集計するだとかDBっぽい要件もないので、オブジェクトをJSONに変換して保存しようかと思ったのですが、ロード時のパフォーマンスがでるのか心配だったのでorg.json.JSONArrayによるJSONのパースにかかる時間を測ってみました。
シリアライズという選択肢もあるっぽいのですが、
JSONなら他の環境とも親和
他の言語にも応用できそう
なんか難しそう
なのでJSONの方向で考えてみました。
[条件]
・10,000件のデータを3種類な階層を持ったオブジェクトに格納(3種類は結果参照)。
・assetsにテキストファイルとして保存したJSONをロード
・オブジェクト内のデータは”keyN”:”valueN”といった短い文字列
・端末はGalaxyNexus
・OSバージョンは4.1
・計測のサンプルは3つ
・単位はms
[結果]
・1階*10,000件 (平たい)
階層1のオブジェクトを10,000件
パースのみ:484,368,330
ロード込み:794,650,616
・10階*10件*100件 (中間)
1階層あたり10件の文字列データを持ったオブジェクトを10階層。
これをさらに100件。計10,000件。
パースのみ:330,261,209
ロード込み:490,385,309
・250*1 (深い)
250階層のオブジェクトを1件。
パースのみ:5(200),7(280),5(200)
ロード込み:9(360),13(520),8(320)
※階層の深いJSONをパースしようとするとStackOverflowErrorが発生。
詳しい条件はわかりませんが、今回は少なくとも300階層以上のJSONのパースでエラーとなりました。
この結果のみデータ件数が250件なので、カッコ()内に40倍(250*40=10,000件)の値を表記しています。
[結論]
今回の結果のみで考察しました。
・パースのみであれば1万件あたりせいぜい500ms未満
・件数が同じであれば平たいデータの方がパース時間が長い傾向がある
・階層は250以下にすべし
以上
関連記事
-
-
【android】リスト項目のmatch_parentが効かない
下記のようなリスト項目用のレイアウトを用意して、リストの右端にチェックボックスを置くようにしたのです
-
-
【android】 webviewでassetsのリソースを使用する
webviewでassets内のリソースにアクセスするには file:///android_a
-
-
【android】IMEの表示/非表示
//IMEを閉じる InputMethodManager inputMethodManager
-
-
【android】任意のスレッドで処理を行う
非UIスレッドでUIを操作したい場合に、任意の処理をUIスレッド上で実行する。 目次
-
-
【android】Activityとプロセスのライフサイクル
またもやライフサイクル周りでハマったのですが、Androidのライフサイクルは複雑で困ります。 G
-
-
【android】アプリ内課金を実装する
アプリ内課金のサンプルコードを解析します。 参考URL 公式API Android
-
-
【android】言語・地域設定の取得
androidでは利用する言語と国名がjava.util.Localeのオブジェクトとして設定されて
-
-
【android】 setOnClickListener(false)が効かない
間違いその1 OnClickListenerが登録されているViewにsetClickable
-
-
[android] モンキーテスト(Monkey Test)を実行する
最近テストの効率化に目覚めました。 モンキーテストは猿にアプリを渡してみてめちゃくちゃな操作をさせ
-
-
【android】複数のカスタムテーマを設定で切り替える
背景色やアプリ全体のテーマ色を設定で変更したいという要望をもらったので実装してみました。