C# 如果可能有多个线程在SQLite数据库中执行插入/更新,我应该始终使用lock吗?
我有一个使用锁的代码:C# 如果可能有多个线程在SQLite数据库中执行插入/更新,我应该始终使用lock吗?,c#,sqlite,xamarin,xamarin.forms,sqlite-net,C#,Sqlite,Xamarin,Xamarin.forms,Sqlite Net,我有一个使用锁的代码: lock (l) { db2.BeginTransaction(); try { rc1 = db2.Execute(s); db2.Commit(); } catch (Exceptio
lock (l)
{
db2.BeginTransaction();
try
{
rc1 = db2.Execute(s);
db2.Commit();
}
catch (Exception ex)
{
db2.Rollback();
Crashes.TrackError(ex,
new Dictionary<string, string> {
{"RunExecute", "Exception"},
{"sql", s },
{"Device Model", DeviceInfo.Model },
});
throw;
}
}
为了减少出现问题的可能性,我是否应该在访问数据库的所有代码周围添加锁(l)?您必须一次只提供一个线程访问SQLite数据库。 SQLite是一个基于文件的数据库,因此访问文件的多个线程(使用一个
SQLiteConnection
)会导致不可预测的行为和损坏错误
若您使用库来操作SQLite数据库,那个么您应该查看多个线程对SQLite数据库的并发访问
有关SQLite数据库多线程支持的更多信息,请参阅和您必须一次只提供一个线程访问SQLite数据库。 SQLite是一个基于文件的数据库,因此访问文件的多个线程(使用一个
SQLiteConnection
)会导致不可预测的行为和损坏错误
若您使用库来操作SQLite数据库,那个么您应该查看多个线程对SQLite数据库的并发访问
有关SQLite数据库多线程支持的更多信息,请参阅和是的,您应该。是的,您应该。
db2.Insert(new QuizHistory()
{
QuizId = quiz,
Cards = (App.viewablePhrases ?? GetViewablePhrases(MO.Quiz)).Count,
Score = score,
UtcNow = (int)Math.Truncate(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds),
Viewed = 1,
Deck = Helpers.Deck.GetTitle()
});