我真的很难解决这个问题。当我使用以下代码更新我的数据库以获取大量记录时,它的运行速度非常慢。我有 500,000 条记录要更新,这需要将近一个小时。在此操作期间,日志文件增长缓慢,主 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();
}