我正在寻找一种在使用 SQLite 的 System.Data.SQLite 包装器时启用 共享缓存模式的方法。
我查看了该项目的源代码,发现它在 UnsafeNativeMethods.cs 中的程序集内部公开为:
internal static extern SQLiteErrorCode sqlite3_enable_shared_cache(
int enable);
不幸的是,我无法使用这个方法,因为它是内部的。
有人有解决办法吗?
非常感谢您的回复。谢谢!
仅供参考,当使用
SQLiteConnectionStringBuilder
API 时,通过以下方式启用共享缓存:
var builder = new SQLiteConnectionStringBuilder();
...
builder.Add("cache", "shared");
您可以在连接字符串中启用共享缓存:
var connection = new SQLiteConnection("FullUri=file:mydb.sqlite?cache=shared");
SQLite使用PRAGMA语句来修改数据库操作。这些语句特定于 SQLite。 PRAGMA 语句可以是任何内容,从启用外键、更改架构版本到设置共享缓存选项(此处提供了 pragma 命令的完整列表) 对于 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 多线程读取
另请参阅https://www.sqlite.org/sharedcache.html - 第 1.1 条建议不应再使用共享缓存,并且日志的 WAL 模式可以提供更好的结果。