*

[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以下にすべし

以上

関連記事

no image

【android】 webviewでassetsのリソースを使用する

webviewでassets内のリソースにアクセスするには file:///android_a

記事を読む

no image

【android】 年月だけのDatePicker

final DatePicker datePicker = new DatePicker(sel

記事を読む

no image

【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサイクルは複雑で困ります。 G

記事を読む

no image

[android] モンキーテスト(Monkey Test)を実行する

最近テストの効率化に目覚めました。 モンキーテストは猿にアプリを渡してみてめちゃくちゃな操作をさせ

記事を読む

no image

【android】ホーム画面や他のアプリの前面にViewを表示する。

WindowManagerのTYPE_SYSTEM_ALERTのレイヤーにViewを表示することで、

記事を読む

no image

【android】スリープモードに入らせない

Androidでは一定時間、操作をしないとスリープモードに入って待機状態になってしまいますが、動

記事を読む

no image

【android】オーバーレイでトップレイヤーにViewを表示する

常にホーム画面や他のアプリより前面にViewを表示する方法です。 前面に透明のViewGroupを

記事を読む

no image

【android】IMEの表示/非表示

//IMEを閉じる InputMethodManager inputMethodManager

記事を読む

no image

【android】非同期処理

Androidで非同期処理、マルチスレッドを処理するスニペット。 AndroidのスレッドはUIス

記事を読む

no image

【android】webviewでアプリ内にwebページを読み込む

webviewを使ってandroidアプリ内にwebページを読み込む定型文です。 //vie

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

no image
知らないと損をする6つのライセンスまとめ

オープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用す

no image
ガリレオ:ニュースブラウザをリリースしました。

概要 ガリレオはニュースを読んだり、検索する機能に特化したブラウザア

no image
【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサ

→もっと見る

PAGE TOP ↑