1

WinFormsアプリで、バイナリファイルからSQLiteDBに大量のデータを読み込んでいます。DBを検索して、新しいデータを追加するかどうかを決定します。

If LookUpResult Then
   AddNewData
Else
   DiscardNewData
End If

これは遅いです。INSERTには時間がかかるようです。DataTableまたはDataSetクラスを使用してデータをRAMにロードしてから、バックグラウンドタスクとしてSQLite DBに書き込む必要がありますか?または、DataTableオブジェクトから一度に多くの行を挿入する方がコストが低くなりますか?

以前はすべてのデータをカスタムクラスにロードしていましたが、高速でしたがメモリ制限に達する可能性があったため、DBに移動しました。とにかくSQLiteがINSERTをRAMにキャッシュすると思っていたでしょうが、そうではないようです。

アドバイスありがとうございます。

4

1 に答える 1

1

クラッシュの一貫性を確保するために、変更されたデータはすべてのトランザクションの最後にディスクと同期されます。明示的なトランザクションを使用しない場合、各コマンドは独自の自動トランザクションを取得します。これは、各コマンドの同期オーバーヘッドが発生することを意味します。

すべての挿入に対して 1 つのトランザクションを使用します。(同じ DB 接続を経由する限り、独自の変更が表示されます。)

于 2012-11-26T08:54:57.550 に答える