1

Asp.net(csファイル)ページを実行している場合:

作成Thread T = new Thread(...) または使用BeginInvoke()

スレッドはAsp.netの予約済みスレッドプールから取得されていますか?

編集

基本的に、.NETはページ要求を処理できるスレッドのプールを維持します。新しい要求を受信すると、ASP.NETは使用可能なスレッドの1つを取得し、それを使用してページ全体を処理します。同じスレッドがページをインスタンス化し、イベント処理コードを実行して、レンダリングされたHTMLを返します。ASP.NETが要求を処理できるよりも速いペースで受信すると、未処理の要求がキューに蓄積されます。キューがいっぱいになると、ASP.NETは503「サーバー使用不可」エラーで追加の要求を拒否するように強制されます。

Asp.netの「スレッドを要求する...」に影響を与えたくありません。

ここに画像の説明を入力してください

4

1 に答える 1

4

を使用するnew Thread()と、実際にはに関連しない新しいスレッドが作成されますThreadPool

を使用するDelegate.BeginInvoke()と、デリゲートは.Netで実行されThreadPoolます(特別なASP.NET ThreadPoolはありません)。

通常、ThreadPool実行時間の短いタスクにはを使用し、実行時間の長いタスクを実行する必要がある場合は手動でスレッドを作成するのが最適です。もう1つのオプションは、.Net 4.0を使用するTaskことです。これにより、より優れた一貫性のあるAPIが提供されます。CPUバウンドTaskは通常、で実行されThreaPoolますが、オプションを指定しLongRunningて、独自のスレッドを作成することができます。

一般に、ASP.NETアプリケーションであっても、制限が十分に高いため、飢餓について心配する必要はありませんThreadPool(少なくとも、.Net 4.0では、以前のバージョンでは多少低くなりました)。これらの問題が発生した場合は、のスレッド数を増やすThreadPoolか、別のスレッドプールを使用できます(コードが必要ですが、インターネットでこのコードを見つけることができるはずです)。カスタムスレッドプールの使用は、を使用した方が簡単です。Taskこれは、を切り替えるだけでよいためTaskSchedulerです。

于 2012-05-08T08:38:56.457 に答える