平行的.For循环给出超时异常
本文关键字:超时 异常 循环 For | 更新日期: 2023-09-27 17:51:15
我使用Parallel。用于进行以下并发呼叫。
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlCommand cmd = new SqlCommand();
//SqlDataReader reader;
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
Parallel.For(0, 100, delegate(int i)
{
//insert into database;
cmd.CommandText = string.Format("insert into Service_LoadTest(id,ServiceCallcount) values ({0},'Call_{1}')", i, i);
cmd.ExecuteNonQuery();
});
插入一些计数到70后,我得到超时异常为"超时过期"。在操作完成之前的超时时间或服务器没有响应。我已经设置了连接字符串超时属性,但没有运气。请帮助。
你的代码不是线程安全的。尝试将所有代码移到循环中:
Parallel.For(0, 100, delegate(int i)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.CommandText = string.Format("insert into Service_LoadTest(id,ServiceCallcount) values ({0},'Call_{1}')", i, i);
cmd.ExecuteNonQuery();
}
});
不要每次都创建SqlConnection和SqlCommand对象,并将它们初始化以分别为每个查询调用ExecuteNonQuery,您应该将所有查询连接起来,并仅为该连接的查询调用ExecuteNonQuery一次。
要实现以上,只需在CommandText中附加以';'分隔的所有查询,然后调用ExecuteNonQuery。