C# 访问Xamarin Forms SQLite对象中的数据时是否需要使用锁对象?
目前我一直在这样做:C# 访问Xamarin Forms SQLite对象中的数据时是否需要使用锁对象?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,目前我一直在这样做: lock (l) { try { var data = db2.Query<CardSetWithWordCount>(qry); return data; } catch (Exception ex) { db2.Rollback(); Debug.WriteLine(ex); Console.WriteLine(qry);
lock (l)
{
try
{
var data = db2.Query<CardSetWithWordCount>(qry);
return data;
}
catch (Exception ex)
{
db2.Rollback();
Debug.WriteLine(ex);
Console.WriteLine(qry);
throw;
}
}
锁(l)
{
尝试
{
var data=db2.Query(qry);
返回数据;
}
捕获(例外情况除外)
{
Rollback();
Debug.WriteLine(ex);
控制台写入线(qry);
投掷;
}
}
但是需要使用lock对象吗?我不断从同事那里得到相互矛盾的意见。当您仅查询数据库以检索数据时,就像您在示例中所做的那样,完全不需要锁定任何内容 如果应用程序对数据库进行大量后台操作,那么锁定数据库层是非常有用的
在大多数情况下(对于移动应用程序),您倾向于一次执行一个操作,因此无需锁定 当您仅查询数据库以检索数据时,就像您在示例中所做的那样,完全不需要锁定任何内容 如果应用程序对数据库进行大量后台操作,那么锁定数据库层是非常有用的
在大多数情况下(对于移动应用程序),您倾向于一次执行一个操作,因此无需锁定 一般来说,不需要,但这取决于您是否从多线程访问数据库,是否需要最新的记录(即,如果您有一个线程正在从远程源检索新数据并更新数据库,而另一个线程正在查询该数据以供显示,并且您希望在更新完成之前锁定该查询,等等。)。我做过一些Sqlite移动应用程序,但没有一个应用程序中有
锁定
语句,这取决于你的使用模式以及你如何为该模式设计/构建应用程序……顺便问一下:为什么要尝试/捕获查询并执行回滚?你在回滚什么?该查询如何失败?一般来说,不,你不必这样做,但确实如此取决于您是否从多线程访问数据库并需要最新记录(即,如果您有一个线程正在从远程源检索新数据并更新数据库,而另一个线程正在查询该数据以供显示,并且您希望在更新完成之前锁定该查询,等等).我做过一些密集的Sqlite移动应用程序,其中没有一个有lock
语句,这取决于你的使用模式以及你如何为该模式设计/构建应用程序……顺便问一下:为什么要尝试/捕获查询并执行回滚?你在回滚什么?该查询如何失败?