[解決済み] Android SQLite データベース: 挿入が遅い
2023-02-20 02:23:14
質問
かなり大きな XML ファイル (約 100 キロバイトから数百キロバイトの間) を解析する必要があります。
Xml#parse(String, ContentHandler)
. 現在、152KB のファイルでこれをテストしています。
パース中に、以下のような呼び出しを使用してSQLiteデータベースにデータを挿入することもしています。
getWritableDatabase().insert(TABLE_NAME, "_id", values)
. これらすべてを合わせると、152KB のテスト ファイルに約 80 秒かかります (これは約 200 行の挿入に相当します)。
すべての挿入ステートメントをコメントアウトすると (しかし、他のすべて、たとえば
ContentValues
など) をコメントアウトすると、同じファイルにわずか 23 秒しかかかりません。
データベース操作にこれほど大きなオーバーヘッドがあるのは普通なのでしょうか?それについて何かできることはありますか?
どのように解決するのですか?
一括挿入を行う必要があります。
疑似コードです。
db.beginTransaction();
for (entry : listOfEntries) {
db.insert(entry);
}
db.setTransactionSuccessful();
db.endTransaction();
そのおかげで、私のアプリでの挿入のスピードが非常に上がりました。
更新しました。
@Yukuさんから、とても興味深いブログ記事を提供していただきました。
Android で inserthelper を使って sqlite データベースへの挿入を高速化する。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] AndroidでSQLiteを使用する際に、並行処理の問題を回避するにはどうすればよいですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] Android APKファイルの中身を見るには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RecyclerView.Stateを使って、RecyclerViewのスクロール位置を保存するには?
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] アンドロイドでシェイクを検出するには?
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] ViewPager2でスワイプを無効にするには?
-
[解決済み] 文字列リソースにHTML?