Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问Xamarin Forms SQLite对象中的数据时是否需要使用锁对象?_C#_Xamarin_Xamarin.forms - Fatal编程技术网

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
语句,这取决于你的使用模式以及你如何为该模式设计/构建应用程序……顺便问一下:为什么要尝试/捕获查询并执行回滚?你在回滚什么?该查询如何失败?