在 System.Data.Sqlite (.net) 中启用共享缓存模式
Enable shared cache mode in System.Data.Sqlite (.net)
我正在寻找一种方法来为 SQLite 启用 shared cache mode when using the 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 命令列表可用 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
我正在寻找一种方法来为 SQLite 启用 shared cache mode when using the 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 命令列表可用 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