2

こんにちは、Android でより高速な方法を知りたいです。

何千もの行を処理するループがあり、メソッドによってパフォーマンスが影響を受けていると思いますSQLiteDatabase.insert()

挿入メソッドにパラメーターを入れましたが、バックグラウンドでメソッドにはすべてをチェックしてクエリを作成するcontentvaluesプロセスが必要だと思います。contentvalue

代わりに、execSQLメソッドにクエリ全体をパラメーターとして入れました。メソッドはそれを実行するためにそれほど多くのことをする必要はないと思います。

私が正しいかどうかはわかりませんがexecSQL、かなりの量のデータを挿入するよりも優れていると思いますが、よくわかりません...

4

2 に答える 2

2

まあ私はそれを試してみましたが、それらの間には少し違いがあります... execSQLの方が高速ですが、それに気付くのは難しいです。

しかし、私の本当の問題は、トランザクションを使用していなかったことです。sqlite にはデータへのアクセスを制御するサーバーがないため、挿入するたびに sqlite は物理ファイルを閉じてから再度開く必要があります。したがって、ループ内に 1000 回の挿入があり、そのためのトランザクションがない場合、1000 回のトランザクションが実行されます。私のテストでは、トランザクションを使用せずに 1000 回の挿入が 11 秒続き、トランザクションを使用すると 1 秒しか続きませんでした。

于 2012-05-23T13:46:03.290 に答える
1

ほとんどの場合、違いは見られません。ほとんどの時間は実際にデータをデータベースに書き込むために費やされ、クエリの生成はかなり単純なステップです。自分で違いを確認したい場合は、両方の方法でインサートの時間を計ることをお勧めします。

于 2012-05-17T23:59:56.570 に答える