非常に長いsp(SSMSで約1時間のsp実行時間)を実行するasp.netページを作成しました。長いSP実行中にスレッドが中止されましたか?
このSPを有効にするAdmin.aspxがあります。 web.configファイルで
私が追加しました:アイブ氏は、追加接続のプロパティでも
<httpRuntime maxRequestLength="111264" requestValidationMode="2.0" executionTimeout="10000000" />
:
_cmd.CommandTimeout = 0; // unlimited
関数は(SPを有効にする(ASHXに)jqueryのAJAXを使用している
jqueryはspをアクティブにするashxファイルを呼び出します。
public void ProcessRequest(HttpContext context)
{
string xmlFileNameParam = ...
string bakFileName = ...
ParameterizedThreadStart ThreadWithParam = dbFuncForThread;
Thread thread = new Thread(ThreadWithParam);
thread.IsBackground = false;
dynamic d = new ExpandoObject();
d.XmlFileNameParam = xmlFileNameParam;
d.BakFileName = bakFileName;
thread.Start(d);
}
public void dbFuncForThread(dynamic d)
{
// activate the long sp
}
しかし、しばらくして、私はこのエラーを参照してください。私はUIは、私はASHXファイル内のスレッドを作成した操作が終了するまでブロックされますしたくありませんでしたしかし
EventLog(および操作が停止しました):**
問題の行があります259Threadが中止されました。 at System.Threading.Thread.SleepInternal(Int32 millisecondsTimeout)*
なぜですか?
は、私がスレッドにそれが必要なすべての環境(接続タイムアウト、実行タイムアウト)P.S.を与えました 私はスレッドを使用して、このような通常のコードを入れていない場合は(UIはいえブロックされてい):
public void ProcessRequest(HttpContext context)
{
string xmlFileNameParam = ...
string bakFileName = ...
dynamic d = new ExpandoObject();
d.XmlFileNameParam = xmlFileNameParam;
d.BakFileName = bakFileName;
dbFuncForthread(d);
}
public void dbFuncForThread(dynamic d )
{
// activate the long sp...
}
ので、コードが細かいとすべてがうまくています。どのようにしてそれがなぜですか、どうすれば解決できますか?
おそらく、ストアドプロシージャを最適化する時間ですか? – Oded
@はspは非常にシンプルで、bakファイルを読み込み、データをスクランブルし、新しいbakを保存します....そのちょうどハッシュデータ...かなりシンプルなsp。 –
@ロイ:なぜ動的オブジェクトを使用しますか? – abatishchev