【问题标题】:Enable shared cache mode in System.Data.Sqlite (.net)在 System.Data.Sqlite (.net) 中启用共享缓存模式
【发布时间】:2015-11-05 10:58:43
【问题描述】:

我正在寻找一种在使用 SQLite 的 System.Data.SQLite 包装器时启用 shared cache mode 的方法。

我查看了该项目的源代码,发现它在 UnsafeNativeMethods.cs 中的程序集内部公开为:

internal static extern SQLiteErrorCode sqlite3_enable_shared_cache(
    int enable);

很遗憾,我无法使用这种方法,因为它是内部的。

有人有解决办法吗?


非常感谢您的回复。谢谢!

仅供参考,使用 SQLiteConnectionStringBuilder API 时,请通过以下方式启用共享缓存:

var builder = new SQLiteConnectionStringBuilder();
...
builder.Add("cache", "shared");

【问题讨论】:

  • 给其他人的注意事项:所有连接都必须在连接字符串中具有“cache=shared”设置,以便它们连接到实际的共享缓存,否则它们将简单地创建自己的。此外,为了使这适用于内存数据库,conn 字符串中也需要一个“mode=memory”,即FullUri=file:demo?mode=memory&cache=shared;

标签: c# sqlite system.data.sqlite


【解决方案1】:

您可以在连接字符串中启用共享缓存:

var connection = new SQLiteConnection("FullUri=file:mydb.sqlite?cache=shared");

【讨论】:

  • 是否有人通过任何解决方案实现了可衡量的性能提升?对我来说可能是一个错误,但这无论如何都不会更快。
【解决方案2】:

SQLite 使用 PRAGMA 语句来修改数据库操作。这些语句特定于 SQLite。 PRAGMA 语句可以是任何东西,从启用外键、更改模式版本到设置共享缓存选项(可以使用完整的 pragma 命令列表here) 使用 Pragma 语句,我知道执行它们的两种方法; 1) 当连接字符串被实例化或 2) 作为命令加载时

1) 实例化期间

new SQLiteConnection("Data Source=c:\mydb.db;Version=3;cache=shared");

2) 单独的命令 Pragma 语句可以像任何普通的数据库命令一样执行 sqliteConnection.Open();

var cmd = new SQLiteCommand("PRAGMA cache=shared",sqliteConnection);
cmd.ExecuteNonQuery();

另一个值得一看的问题: SQLite SharedCache MultiThread Reads

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2019-11-14
    • 1970-01-01
    • 2011-01-04
    • 2023-03-07
    相关资源
    最近更新 更多