多线程+ c# +性能+ SQLite

本文关键字:SQLite 性能 多线程 | 更新日期: 2023-09-27 18:06:15

我有Windows窗体应用程序
(c# with visual studio 2010, Framework: 4.0)

数据库:.db(文件数据库),通过SQLite连接对象

Thread th = new Thread(() => database(node, xNodetcname, xNodesqlquery1, xNodeHint, e, inXml));
th.Name = thread;
th.Start();

以上代码在database()函数上创建每个线程并并行处理。
每个线程都有一个从数据库中获取数据的SQL查询。

当我不使用多线程时,性能更好但是当我使用多线程时,性能下降了。

的例子:

无多线程3查询处理时间= 1.5分钟
使用多线程3查询处理时间= 1.9分钟。

我的目标是减少查询的处理时间。

多线程+ c# +性能+ SQLite

那么一般要远离线程。

一些基础教育:在大多数情况下,数据库性能受IO限制,而不是CPU。IO可以通过使用大量内存作为缓冲区来部分缓解,因此大型数据库服务器有大量内存。

运行一个小型轻量级数据库。它可能不是运行在数据库服务器级别的硬件或SSD上——因此它有IO问题。性能将受到IO的限制。

现在多线程确保IO端(硬盘)效率低下,特别是因为winform应用程序不能在高端IO子系统上正常运行。

因此:如果你想要更快的查询,那么:

  • 优化查询缺失索引?
  • 获得适当的硬件和/或升级到heaver设置。SSD是一个很大的帮助。

不要使用多线程-尝试在SQL级别解决它,但接受这可能是不可能的。公司仍然使用真正的数据库服务器来处理大量数据是有原因的。而SQLite可能不是一个好的选择-没有机会说它是或不是,因为你完全忽略了信息中的那一面。

这里有几件事你必须考虑:

  1. 您的数据库连接是否在多线程模式(如本文档所述)?
  2. 数据库引擎是否适合多线程(提示,SQLite不适合,参见@TomTom回答)
  3. 您是否使用线程池(您没有)或您是否每次都初始化一个新线程(这相当慢)