.net 线程越多,速度越慢

.net 线程越多,速度越慢,.net,multithreading,ado.net,.net,Multithreading,Ado.net,我们有一个同时在Java和.NET(使用IKVM编译的.NET)中运行的应用程序。它从SQL Server数据库中提取数据以生成报告 它正在构建500个报告,因此每个报告都可以构建在一个单独的线程中。多个线程应该在更少的日历时间内完成所有作业,直到线程之间的抖动占用太多时间为止 在4核系统上,Java版本按预期工作。大赢最多8个线程,小赢16个线程 在同一个系统上,使用2个线程的总时间最快。不是4个,而是2个。同一台计算机,同一个数据库。除了一个使用JDBC和一个使用ADO.NET之外,基本上是

我们有一个同时在Java和.NET(使用IKVM编译的.NET)中运行的应用程序。它从SQL Server数据库中提取数据以生成报告

它正在构建500个报告,因此每个报告都可以构建在一个单独的线程中。多个线程应该在更少的日历时间内完成所有作业,直到线程之间的抖动占用太多时间为止

在4核系统上,Java版本按预期工作。大赢最多8个线程,小赢16个线程

在同一个系统上,使用2个线程的总时间最快。不是4个,而是2个。同一台计算机,同一个数据库。除了一个使用JDBC和一个使用ADO.NET之外,基本上是相同的代码

Sql Server ADO.NET连接器中是否存在对使用它的多个线程有害的内容


或者还有什么我应该看的吗?

当涉及多个线程而不是ADO.NET时,我会更惊讶于IKVM做一些可疑的事情。你是如何做IKVM并使用ADO.NET的,只是好奇IKVM可能是一个因素…@Joppe-当Java代码调用JDBC时,.NET(IKVM)代码调用ADO.NET。我们有一个接口,用于其他代码调用,它的实例化是Java和.NET中调用DB的另一个类。只需问一个明显的问题:您是否在ADO.NET端(可能通过您的connectionstring)设置了适当的连接池(或者未设置默认为100)。如果是,则不应在线程之间共享连接对象(由池处理)@Joppe不对连接池进行任何设置,并且每个线程都保持其自身的连接。生成报告时,每个线程将创建2个连接,并在完成后释放它们。