Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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# Ado.net从多线程调用存储过程的速度比一个线程慢_C#_Sql Server_Multithreading_Ado.net - Fatal编程技术网

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