Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程+C+性能+SQLite_C#_Multithreading_Sqlite - Fatal编程技术网

C# 多线程+C+性能+SQLite

C# 多线程+C+性能+SQLite,c#,multithreading,sqlite,C#,Multithreading,Sqlite,我有Windows窗体应用程序。 使用visual studio 2010编写的C,框架:4.0 数据库:.db文件数据库,通过SQLite连接对象 Thread th = new Thread(() => database(node, xNodetcname, xNodesqlquery1, xNodeHint, e, inXml)); th.Name = thread; th.Start(); 上面的代码创建每个线程并对数据库函数进行并行处理。 每个线程都有一个从数据库获取数据的SQ

我有Windows窗体应用程序。 使用visual studio 2010编写的C,框架:4.0

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

Thread th = new Thread(() => database(node, xNodetcname, xNodesqlquery1, xNodeHint, e, inXml));
th.Name = thread;
th.Start();
上面的代码创建每个线程并对数据库函数进行并行处理。 每个线程都有一个从数据库获取数据的SQL查询

虽然我没有使用多线程,但性能更好 但是当我使用多线程时,性能会下降

例如:

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


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

然后通常远离线程

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

您运行一个小的leightweight数据库。它可能不在数据库服务器级硬件或SSD上运行,因此存在IO问题。性能将受到IO的限制

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

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

优化查询。缺少索引? 获得适当的硬件和/或升级到提升机设置。SSD在这里是一个很大的帮助。
不要使用多线程-尝试在SQL级别解决它,但要接受这可能是不可能的。公司仍然使用真正的数据库服务器来处理大量数据是有原因的。SQLite可能不是一个好的选择,因为您完全忽略了信息中的这一方面,所以不可能说它是或不是一个好的选择。

这里有几点您必须考虑:

您的数据库连接是否如文档中所述处于多线程模式? 数据库引擎是否适合多线程提示,SQLite不适合,请参阅@TomTom-answer 您是在使用线程池吗?您不是,还是每次都在初始化一个新线程,这相当慢
+1-或者可能考虑在应用程序中做更多的工作,在多个线程上预处理数据,然后只有一个线程可以添加到数据库中。@TomTom。。谢谢你提供的信息。我理解这个缺点。谢谢你提供链接