【问题标题】:System.Data.SQLite slow connect for non-admin users非管理员用户的 System.Data.SQLite 慢速连接
【发布时间】:2012-10-16 06:47:42
【问题描述】:
我有一个带有 System.Data.Sqlite (1.0.82) 的 .NET 4 应用程序(混合模式),用于对加密数据库进行数据库访问。
当我将应用程序安装到“c:\program files\myfolder”时,连接到 sqlite 数据库文件的速度很慢。日志文件显示延迟了几秒钟的是 sqlite 连接语句。
当我执行以下操作时,问题不会发生:
- 以管理员权限运行应用程序
- 安装除 c:\program files\ 以外的任何其他位置
- 将应用程序安装到 c:\program files\,但将数据库移动到另一个文件夹。
我不知道这可能是什么原因......
【问题讨论】:
标签:
.net
performance
sqlite
non-admin
【解决方案1】:
如果 DB 文件位于应用程序目录中,则 UAC 很可能会将其移动到“...appdata\Local\VirtualStore\Program Files”目录。最佳做法是创建自己的 appdata\MyApp 文件夹并将原始数据库从 c:\program files\MyApp 文件夹中复制出来。
【解决方案2】:
它有助于以只读模式打开数据库。 (无论如何,您应该只在程序文件夹中保留只读内容。)
只需将";Read Only=True" 附加到连接字符串即可。
private const string CONN_TEMPL = "Data Source={0};Version=3;Read Only=True";
var conn = new SQLiteConnection(
String.Format(CultureInfo.InvariantCulture, CONN_TEMPL, databasePath)
);