Ado.net从多线程调用存储过程比单线程调用慢

本文关键字:调用 单线程 存储过程 Ado 多线程 net | 更新日期: 2023-09-27 18:12:42

我试图理解为什么当我使用单线程应用程序使用以下代码

    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();
                }
            }
        }
    }

对于下面的代码,我得到的结果大约是每秒230

现在,如果我尝试用任务来做它(当然,在循环内更改为80次迭代

for (int i = 0; i < 100; i++)
{
    list.Add(Task.Factory.StartNew(Run, cancel, TaskCreationOptions.LongRunning));
}

我得到的总结果大约慢了3秒。(我正在运行localhsot i7)

我不认为这是问题(因为我删除了所有的逻辑)

在SQL分析器上,我确保连接是池的。

我的任务管理器显示一切正常(cpu内存磁盘网络)没有任何东西是100%

我错过了什么?

Ado.net从多线程调用存储过程比单线程调用慢

您的"tasks"版本试图同时打开多个连接。

因此,它可能会在连接池中创建比单线程版本更多的连接,单线程版本只需要在连接池中创建一个连接。