2 つの入力パラメーターを持つ SP をスレッド上で複数回 (たとえば 100 回) 実行したいと考えています。Asynchronous Processing=True; を追加しました。接続文字列で MultipleActiveResultSets=true を使用し、以下のコードを使用して SP を実行します
ボタンクリック時
// ExecuteSPList は、100 個の ReportID を持つリストを持つリストであり、ボタンをクリックすると、CallInvokeUpdate を呼び出すスレッドを 100 回作成しています
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;
}
私の問題は、ストアド プロシージャ "UpdateExecuteSP" の実行に 1 つの ReportId に対して 5 秒かかる場合、このアプローチを使用すると、約 100*5 = 500 秒かかることです。
この時間を短縮し、SPを100回並行して実行する方法を提案できますか? 実行間に依存関係はありません。
なにか提案を ?