我想在一个线程/并行上执行一个具有 2 个输入参数多次(比如 100 次)的 SP。我添加了异步处理=真;MultipleActiveResultSets=true 在我的连接字符串中并使用以下代码执行 SP
在按钮_单击
// ExecuteSPList 是一个具有 100 个 ReportID 的列表,在单击按钮时,我正在创建线程 100 次,该线程正在调用 CallInvokeUpdate
Parallel.ForEach(ExecuteSPList, itm =>
{
CallInvokeUpdate(itm.ToString());
});
然后在 CallInvoke 中:
public void CallInvokeUpdate(string str)
{
ExecuteSP(str, strSelectedMonthEndDate);
}
最后是 ExecuteSP 方法。
public string ExecuteSP(string ReportId)
{
try
{
string connectionString = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
DataSet ds = new DataSet();
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("UpdateExecuteSP", sqlConnection);
sqlConnection.Open();
cmd.CommandTimeout = 3000000;
addParameter(cmd, "ReportId", ReportId, SqlDbType.Int);
cmd.CommandType = CommandType.StoredProcedure;
IAsyncResult result = cmd.BeginExecuteNonQuery();
cmd.EndExecuteNonQuery(result);
}
return "OK";
}
catch (Exception ex)
{
throw;
}
}
private void addParameter(SqlCommand cmd, string name, object value, SqlDbType type)
{
SqlParameter parameter = new SqlParameter(name, type);
cmd.Parameters.Add(parameter);
parameter.Value = value;
}
我的问题是,如果一个 ReportId 执行存储过程“UpdateExecuteSP”需要 5 秒,那么使用这种方法也需要大约 100*5 = 500 秒。
任何人都可以建议如何减少此时间并并行运行 SP 100 次。任何执行之间都没有依赖关系。
有什么建议吗?