SQLite在多用户本地网络环境中性能不佳

时间:2017-03-22 15:00:44

标签: c# performance sqlite system.data.sqlite

我们在应用程序中使用SQLite作为共享数据库。 (我知道这不是最好的解决方案,但服务器/客户端架构是不可能的) 只有少数用户,一个非常小的数据库,只有很少的写入。

应用程序是用c#编写的,我们使用System.Data.SQLite.dll但问题也出现在SQLiteDatabaseBrowser

只要只有一个用户连接到数据库并查询某些结果,它就会非常快。只有几毫秒。一个用户可以建立多个连接并并行执行select语句。这对性能也没有影响。

但是,只要来自不同mashine的另一个用户连接到数据库,每个连接用户的性能就会变得非常差。只要所有连接/应用程序都关闭,性能就会很差。 之后,第一个用户连接,获得良好的性能,直到下一个用户连接。

我尝试了很多东西:

  • PRAGMA synchronous = OFF
  • 更新为lates sqlite版本(并使用该版本创建了一个新的db文件)
  • DB-File只读
  • 每个人只读网络共享
  • 具有不同选项的连接字符串(几乎所有)
  • 不同的sqlite程序(我们的应用程序和SQLiteDatabaseBrowser)
  • 不同的文件系统hostet on(NTFS和FAT32)

之后,我写了一个小应用程序,打开一个连接,查询一些结果并显示通过的时间。这一切都在无尽的循环中。

以下是此简单应用的代码:

System.Windows.Forms

在使用这个小应用程序进行测试时,我意识到,只要让另一个系统在sqlite db上获取文件句柄就可以降低性能。所以看来,这与db的连接无关。性能保持低,直到释放所有文件句柄。我用procexp.exe跟踪它。此外,只有远程系统遇到性能问题。在db文件主机上,查询每次都会快速运行。

有没有人遇到同样的问题或有一些提示?

1 个答案:

答案 0 :(得分:0)

Windows不会缓存在另一台计算机上同时访问的文件。

如果您需要高并发性,请考虑using a client/server database