私はこの問題を解決するのに本当に苦労しています。次のコードを使用して多数のレコードのデータベースを更新すると、実行速度が非常に遅くなります。更新するレコードが500,000あり、これには1時間近くかかります。この操作中、ジャーナルファイルはメインのSQLite db3ファイルにほとんど変更を加えることなくゆっくりと成長します-これは正常ですか?
この操作は、更新するレコードの数が多い場合にのみ問題になるようです。レコードの数が少ない場合は、事実上瞬時に実行されます。
このコードが実行される前に、他のいくつかの操作がデータベースで実行されるので、それらはデータベースをどのように拘束するのでしょうか?他のすべての接続が正しく閉じられていることを確認しようとしました。
提案をありがとう
using (SQLiteConnection sqLiteConnection = new SQLiteConnection("Data Source=" + _case.DatabasePath))
{
sqLiteConnection.Open();
using (SQLiteCommand sqLiteCommand = new SQLiteCommand("begin", sqLiteConnection))
{
sqLiteCommand.ExecuteNonQuery();
sqLiteCommand.CommandText = "UPDATE CaseFiles SET areaPk = @areaPk, KnownareaPk = @knownareaPk WHERE mhash = @mhash";
var pcatpk = sqLiteCommand.CreateParameter();
var pknowncatpk = sqLiteCommand.CreateParameter();
var pmhash = sqLiteCommand.CreateParameter();
pcatpk.ParameterName = "@areaPk";
pknowncatpk.ParameterName = "@knownareaPk";
pmhash.ParameterName = "@mhash";
sqLiteCommand.Parameters.Add(pcatpk);
sqLiteCommand.Parameters.Add(pknowncatpk);
sqLiteCommand.Parameters.Add(pmhash);
foreach (CatItem CatItem in _knownFiless)
{
if (CatItem.FromMasterHashes == true)
{
pcatpk.Value = CatItem.areaPk;
pknowncatpk.Value = CatItem.areaPk;
pmhash.Value = CatItem.mhash;
}
else
{
pcatpk.Value = CatItem.areaPk;
pknowncatpk.Value = null;
pmhash.Value = CatItem.mhash;
}
sqLiteCommand.ExecuteNonQuery();
}
sqLiteCommand.CommandText = "end";
sqLiteCommand.ExecuteNonQuery();
sqLiteCommand.Dispose();
sqLiteConnection.Close();
}
sqLiteConnection.Close();
}