MIT’s blog

個人的なメモかな

Parameterの準備

1レコードに1,700以上の項目があるテーブルの登録処理に時間が掛かってたんですが、このやり方を改善してみました。これまでは

cmd.Parameters.Add(new SQLiteParameter("@PARA", value));

って感じで毎回やってたんですが、事前に

cmd.Parameters.Add(new SQLiteParameter("@PARA", dummy));

とパラメーターは追加しておき、レコード追加時は値のみを

cmd.Parameters[0].Value = value;

として全てのパラメーターが準備出来たら

cmd.Prepare();
cmd.ExecuteNonQuery();

とする事でかなりの時短が出来ました。このテーブルは元ファイルから約2,500レコード分のデータを登録してまして80秒前後掛かってましたが、今回の修正で4秒とか劇的に早くなりました^^

 

で、全ての修正はまだなんですが、昨夜フルセットアップしてみた所、これまで13時間だったものが半分以下の6時間弱に改善しててほっとしてます。ただ、まだまだ項目数が少ないけど元ファイルから数万レコード分登録するテーブルがあるんですが、これが4万レコードとかだと30秒以上掛かっているのを何とかしなきゃです。接続文字列は今回はデフォルトに戻してフルセットアップしました。これはdatabase is busyのエラーがトラップ出来ずに延々とハマる時があるので、それを回避する為です。

今回の修正を全てに行った後にまたフルセットアップがどの程度まで短縮されるかは分かりませんが、今回程は期待出来ないので何か考えないとダメかも^^;