c# - 在 SQLite 上只执行 SELECT 命令

标签 c# windows sqlite select system.data.sqlite

我制作了一个 SQLite 数据库(约 700MB,3 个表,3 个索引 - 1 个 rtree 索引和 2 个主键)。我已将其标记为只读文件(在 Windows 上)。

从多个线程在此数据库上仅执行 SELECT 命令是否安全且高效?

如果是这样,如何提高性能(启用任何选项或标志,任何微小的调整)?

此应用程序是在 C# 中使用 System.Data.SQLite (1.0.82.0),在 x64 机器上为 .NET 4.0 编译。而且它工作正常(不一定是高性能或正确并行,因为我不能/不知道(如何)证明它们)。目前我没有真正的瓶颈,但很快我就会!我需要尽快搜索 rtree。 (在我的机器上 4GB,2 核)搜索 rtree 有时需要超过 5 毫秒。我已经使该部分成为多线程以并行处理我的数据。并根据R-Tree的结构(或者我认为 SQLite 中的 R*-Tree)如果我的数据库增长到一些 GB,那应该没问题,因为这些树深度低并且在大型数据集上速度很快。但如果有任何改进是可能的,那么应该在此应用中考虑。

我不能确定并行的部分是否真的并行运行,例如 SQLite(或 System.Data.SQLite)没有内部锁。事实上,在某些测试中,并行版本运行得更慢!

最佳答案

这应该是安全的,前提是每个线程都有自己的连接,或者您使用锁来防止多个线程同时使用同一个连接。

关于c# - 在 SQLite 上只执行 SELECT 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14060443/

相关文章:

sql - 获取最新价格SQLITE

c# - 如果多个用户访问同一页面,Query String 值会改变吗?

windows - Windows XP 中用于复制粘贴文件夹的 .bat 文件

windows - 无法拉取 nanoserver :1903 Docker image

python - 导入cv2失败-为Windows安装适用于Python 2.7的OpenCV

java - 具有相同 PK 的 2 个插入为何会成功?如何更新重复的 key ?

iphone - 如何在iPhone map 上显示从当​​前位置到目的地位置的方向

c# - NHibernate 不更新多对多连接表

c# - 从父类(super class)转换为子类

c# - 如何使用 reduce 在多个文档上创建索引