0

HTCSensationでandroid2.3.4と4.0.3のパフォーマンスに大きな違いがありました。

いくつかの追加情報:

  • ormliteバージョン4.42
  • daoを取得するには、DaoManagerとdaoシングルトンを使用します。
  • バッチタスクを使用して挿入
  • 30個のオブジェクトを作成または更新しようとしています(作成にのみ時間がかかります)
  • これらは単一のオブジェクト(リレーションなし)ですが、長い文字列フィールドがあります。

時間ログ:

ICS(4.0.3)

10-16 09:17:06.206: 1 getting dao
10-16 09:17:06.206: 2 got dao
10-16 09:17:06.206: 2 start call batch task
10-16 09:17:06.216: 3 start initializing batch_task
10-16 09:17:06.326: 121 finished initializing batchtask  
10-16 09:17:06.836: 623 end batch task

2.3.4

10-16 09:20:00.355: 0 getting dao
10-16 09:20:00.355: 1 got dao
10-16 09:20:00.355: 1 start call batch task
10-16 09:20:00.355: 1 start initializing batch_task
10-16 09:20:00.435: 87 finished initializing batchtask  
10-16 09:20:00.445: 96 end batch task 

ICSでわかるように、作成にははるかに多くの時間がかかります。

ICSで同様のパフォーマンスを得るにはどうすればよいですか?

4

2 に答える 2

3

したがって、コメントを何度か繰り返した後、Android ICSのパフォーマンスの違いは、デフォルトでは、そのバージョンではSQLiteが「TRUNCATE」ジャーナルモードで実行されている可能性があるという事実が原因である可能性があります。Sqliteドキュメントから:

TRUNCATEジャーナリング・モードは、ロールバック・ジャーナルを削除するのではなく、長さゼロに切り捨てることによってトランザクションをコミットします。多くのシステムでは、含まれているディレクトリを変更する必要がないため、ファイルの切り捨てはファイルの削除よりもはるかに高速です。

2.3.4と比較すると、ログ先行書き込み(WAL)モードで実行されます。WALの方が速いと思います。

ORMLiteでジャーナルを変更するには、次のようにします(おそらく)。

someDao.rawExecute("PRAGMA journal_mode = WAL;");

その他の例については、 SqlitePRAGMAのドキュメントを参照してください。

于 2012-10-16T16:39:03.993 に答える
1

最後に、私は解決策を見つけました:

getHelper().getDao();
SQLiteDatabase db = getHelper().getWritableDatabase();
Cursor cursor = db.rawQuery("PRAGMA journal_mode = WAL;", null);

この方法だけが機能しました。

この問題に関するその他の追加情報:

  • 私は2つのHTCセンセーションを持っていますが、どちらもICSに更新されているため、4.0.3に更新されています
  • しかし、ソフトウェア番号は異なります!! (3.33.401.53、および3.33.401.6)、およびデバイスで利用可能な更新がありません(これは奇妙です)。何が起こったのかよくわかりません。ビルド間でデフォルトのジャーナルモードが変更されたのでしょうか。

したがって、データベース機能が遅い場合は、dbの最初のジャーナルモードを確認してください。グレイ、助けてくれてありがとう。

于 2012-10-18T06:39:39.577 に答える