【WPF】SQLiteのインサートが遅いので速度アップの方法を試してみる

2017年11月14日C#,SQLite,開発

おはようございます。

SQLiteって手軽で便利なんですが、
大量のデータを扱うとなるとそれなりに速度が気になってきます。

試しに何万件のインサート処理をやってみたら案の定とても待ち切れる時間で処理が終わらなかったのでちょっと調べてみました。

プログラムは次の記事のものを流用します。

スポンサーリンク

元の処理

CSVを読み込んで一括登録する処理を変更してみます。

MainWindow.xaml.cs

プラグマステートメントを設定

まずはプラグマというステートメントを設定してみます。
(プラグマステートメントとは、SQLite ライブラリの動作を変更するためのものです。)

次の記事に色々と詳しく書いてありますので参考にしてみてください。

参考
http://devlights.hatenablog.com/entry/2014/02/01/151642

接続文字列にオプションを追加する方式でやってみました。

詳細に処理時間を載せませんが、処理速度の改善が見られました。

明示的にトランザクションを開始する

これは結構有名な話しですが、
一括処理する際にちゃんと明示的にトランザクションを制御しないと、
1件毎にそれなりに時間のかかるトランザクション処理が実行されてしまうので、明示的にトランザクションを開始するように変更します。

これも処理速度アップとしては有効な手段でした。

Sqlコマンドに変更する

データコンテキストを使って更新や追加を行うのも結構時間がかかるようなので、SQLクエリを直書きして実行するようにしてみます。

こちらも勿論速度アップしました。

まとめ

ちょっと殴り書きみたいな記事ですが、とりあえず上記のような対策を施すとひとまず何万件のインサートも問題なく実行できるかと思います。

もっと劇的に速度アップさせる必要がある場合は、
登録するデータの存在確認をしないようにするといいと思います。
(この場合はテーブル定義や、別で一時テーブルを用意するなど別途検討が必要となります)

ではでは。

スポンサーリンク


関連するコンテンツ

2017年11月14日C#,SQLite,開発C#,SQLite,WPF,プログラミング

Posted by doradora