【问题标题】:Which SQLite (sqlite-net-pcl) flags should I use on Xamarin.Forms?我应该在 Xamarin.Forms 上使用哪些 SQLite (sqlite-net-pcl) 标志?
【发布时间】:2021-09-17 14:24:14
【问题描述】:

我应该在 SQLite 标志中使用 FullMutex 还是 NoMutex?他们的目的是什么?如果是,我应该使用哪个?

现在:我正在使用这些标志:

public static class SQLiteConstants
{
    public const SQLiteOpenFlags Flags =
        SQLiteOpenFlags.ReadWrite |
        SQLiteOpenFlags.SharedCache |
        SQLiteOpenFlags.Create |
        SQLiteOpenFlags.FullMutex;

    public static string GetDatabasePath
    {
        get => Path.Combine(FileSystem.AppDataDirectory, "UserScores.db3");
    }
}

【问题讨论】:

    标签: c# android ios sqlite xamarin


    【解决方案1】:
    1. NoMutex 的意思是新的数据库连接将使用“多线程”线程模式。这意味着允许单独的线程同时使用 SQLite,只要每个线程使用不同的数据库连接。

    2. FullMutext 的意思是新的数据库连接将使用“序列化”线程模式。这意味着多个线程可以安全地尝试同时使用相同的数据库连接。 (互斥锁会阻止任何实际的并发,但在这种模式下尝试并没有什么坏处。) 所以,你可以根据自己的情况选择旗帜

    【讨论】:

    • 抱歉回复晚了,那么FullMutex在性能方面要好得多?因为如您所知,移动设备的资源有限
    • 如果你没有互斥体并且两个线程使用相同的连接来更新同一个表,那么要么两者都可以工作,要么你的应用程序将失败,内存将被破坏。如果您使用默认的序列化(全互斥锁),那么两者都可以工作,并且不会产生如上所述的后果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2023-03-19
    • 1970-01-01
    • 2016-08-04
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多