2009-05-15 17 views
3

私は、ページを参照することによってキックオフする必要があるスケジュールされたタスクを持っています。私のウェブホストでは、Windowsスケジューラを使用できません。安全にASP.NET MVCでスレッドを生成できますか?

このタスクで実行する仕事の1つは、他のWebサイトからデータを取得することです。なぜなら、Web要求の処理速度が遅いために、スレッドを使用するタスクを設定したからです。

mvcアクションからこのタスクを実行すると、Webサーバー全体が不愉快になり、それ以上のページの読み込みを拒否するように見えます。

Webアプリケーションからスレッドを使用するのは悪いですか?私が安全にそれを行う方法はありますか?どのスレッド制限がありますか?私は本当にちょっとだけもっと情報を知る必要がありますか?

EDIT:?SUBQUESTIONS

私はASP.NETランタイム(感謝アントン)で使用されるスレッドプール(からスレッドを使用する場合はが、私はそれが使用できるスレッドの数を制限することができますどのようなASP.NETスレッドプールのサイズ制限はありますか?

これは別のサイトを持つ方がよいでしょうか?別のASP.NETアプリケーションを含む仮想フォルダですか?スレッドプールの権限が制限されてしまうのですか?

+0

も参照してください:http://stackoverflow.com/questions/1325718/using-threadpool-queueuserworkitem-in-asp-net-in-a-high-traffic-scenario – Matthias

答えて

3

着信要求を処理する場合、ASP.NETランタイムは、容量が制限されている.NET ThreadPoolからスレッドを取得します。そのため、トレッドプールからスレッドを使用している場合、アプリケーションのスケーラビリティが損なわれる可能性があります。

これを回避する方法は通常Threadになりますが、AppPoolがリサイクルされたときにこれらのメソッドは強制終了されます。

+0

あなたは私の問題をちょうど解決したと思います。私はコマンドラインからこれを実行していたので、私はスレッドプールのサイズを変更していました。これは、それが転倒する原因になります。 サブ質問:それはそれが使用するスレッドプールからいくつのスレッドを制限できますか? –

+0

@Matthewあなたはコマンドラインから正確に何を実行していますか? –

+0

申し訳ありませんが、ひどく書かれています。私の仕事はオンデマンドで手動で実行するためにコンソールアプリケーションにカプセル化されていました。それは問題なく走り、私はウェブサイトからそれを実行したときに問題を引き起こし始めました。スレッドプールのサイズについて言及したとき、あなたは私の記憶に拍車をかけました。 –

0

それはどのように行われるかによって異なります。私はASP.NETの下でスレッディングになると大いに有能ではありませんが、そうしなければクライアントからの要求に役立つスレッドを使用するリスクがあると思います。

Here is a tutorial on multithreading in ASP.NETこれは少し転送するのに役立つかもしれません。

3

これらのスレッドがリクエスト/レスポンス(これは現在消えているかもしれません)に返答しようとしない限り、それが積極的に問題を引き起こした場合、私は驚くでしょう。どのような症状が見られますか?あなたは "不気味"を定義できますか?

私は問題なくロギングなどにスレッドを定期的に使用します。

影響を最小限に抑えるには、プロデューサ/コンシューマパターンを使用することができます。そのため、多くのASP.NET MVC要求/応答スレッドを処理するワーカースレッドは1つ(または少数)のみです。

+0

「ワッキー」とは、処理が完了したことを意味します。私のタスク(すべての私の生まれつきのスレッドを終了する必要があります終了/タイムアウト)を返し、ビュー()を返しますが、ブラウザは、ページの受信を完了していないと、サイトの他のページハングアップします。 –

関連する問題