C# Ado.net从多线程调用存储过程的速度比一个线程慢
我试图理解为什么我使用单线程应用程序 使用以下代码C# Ado.net从多线程调用存储过程的速度比一个线程慢,c#,sql-server,multithreading,ado.net,C#,Sql Server,Multithreading,Ado.net,我试图理解为什么我使用单线程应用程序 使用以下代码 public void Run(object state) { using (var connection = new SqlConnection(connectionString)) { using (var command = new SqlCommand("UpdatePriceInterval", connection)) {
public void Run(object state)
{
using (var connection = new SqlConnection(connectionString))
{
using (var command = new SqlCommand("UpdatePriceInterval", connection))
{
command.CommandType = System.Data.CommandType.StoredProcedure;
for (int i = 0; i < 8000; i++)
{
command.ExecuteNonQuery();
}
}
}
}
公共作废运行(对象状态)
{
使用(var连接=新的SqlConnection(connectionString))
{
使用(var命令=新的SqlCommand(“UpdatePriceInterval”,连接))
{
command.CommandType=System.Data.CommandType.StoredProcess;
对于(int i=0;i<8000;i++)
{
command.ExecuteNonQuery();
}
}
}
}
对于下面的代码,我得到的结果大约是每秒230次
现在,如果我尝试使用任务(当然,在循环内部更改为80次迭代)
for (int i = 0; i < 100; i++)
{
list.Add(Task.Factory.StartNew(Run, cancel, TaskCreationOptions.LongRunning));
}
for(int i=0;i<100;i++)
{
添加(Task.Factory.StartNew(运行、取消、TaskCreationOptions.LongRunning));
}
我得到的总结果大约慢了3秒。(我在localhsot i7上运行)
我认为sp不是问题所在(因为我删除了其中的所有逻辑)
在SQL探查器上,我确保连接是池连接
我的任务管理器显示一切正常(cpu内存磁盘网络),没有一个是100%
我缺少什么?您的“任务”版本正在尝试同时打开多个连接
因此,它可能会在连接池中创建比单线程版本多得多的连接,而单线程版本只需要在连接池中创建一个连接。所以进程是空的?那么这应该会快得多。这是网络上的远程服务器,对吗?是的,进程是空的,我在我的l上尝试了一次本地计算机和同一网络上的远程计算机。结果是相同的,即进程为空?为什么在本地主机上调用空进程需要5毫秒?这太多了。正在发生一些事情。仅仅因为您创建了一组任务,它们就不必在不同的线程中运行。请看一看,您还可以查看@usr answer in