2012-02-11 21 views
1

プールからのスレッドが再生されたときと解放されたときを正確に知りたい。私が欲しいものIISスレッドプールスレッドの使用状況を記録する方法はありますか?

は、私はその非同期メソッドを気にする必要があるかどうかを判断するために、サードパーティのライブラリの振る舞いを探ることです。これらのメソッドが共通プールからスレッドをブロックする場合、それらのメソッドを使用してもASP.NETアプリケーションには何のメリットもありません。ライブラリは難読化されているので、私は逆コンパイラで答えを検索したくありません。

答えて

1

あなたがイベントやThreadPoolのスレッドが何をしているかを教えてくれるいくつかの種類の公共のフックを期待している場合は、残念ながらそのような事はありません。

私は役立つかもしれない他の二つのアプローチを考えることができます。

まず、あなたがworkerThreadsの値を確認することができます前に、あなたのライブラリーに呼び出した後、ThreadPool.GetAvailableThreads()から生じます。値が変更されると、ライブラリが原因である可能性があります。これは、単一の要求のみを処理するテスト環境では意味がありそうです。また、カスタムWindowsパフォーマンスカウンタにworkerThreads番号を保存して、時間の経過と共に追跡することもできます。おそらく、これを使用して、一方のアプローチと他方のアプローチを比較することができます。

はここでパフォーマンスカウンタのアプローチを説明する記事へのリンクです:あなたはIIS 7+を使用している場合

http://msdn.microsoft.com/en-us/library/ff650682.aspx

、別の可能性は4.0+ .NETでHostingEnvironment経由(MaxConcurrentRequestsPerCPUを無効にすることで、または.NET 3.5以降のaspnet.configファイルを使用して)0に設定し、MaxConcurrentThreadsPerCPUを比較的少数に設定して、ライブラリ内の1つのインターフェイスと別のインターフェイスを使用して負荷のかかったアプリケーションのパフォーマンスを測定します。十分なスレッドがないために要求がキューに入れられると、応答時間がそれに応じてジャンプします。これを行う方法の詳細と残念なことに測定値は、ライブラリとWebリクエストの構造に依存します。

1

あなたが質問する方法は、あなたのプログラムを監視するデバッガを獲得したようなものです。

今あなたがプールからスレッドを呼び出すとき、そしてあなたがそれを解放するときあなたは知っていますか?

プログラムを制御しないと、一般的なデバッガのように他のプログラムとそのサウンドを表示して追跡することに成功しました。これは、c/C++と多くのコードを使用してフック関数で行うことができます。

あなたがプールをクリックし、プロパティを表示する場合はSysinternalsのプロセスエクスプローラは、あなたにリアルタイムで開いてスレッドを与えることができます。

一方から私はThreadPool.GetAvailableThreadsは情報のあなたが必要な瞬間に、尋ねるあなたを与えることができると思います。

http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getavailablethreads.aspx

あなたには、いくつかのより多くの情報は、あなたが本当によりターゲットを絞っニーズに一般的なデバッグプログラムから、アーカイブし、あなたの質問を絞り込むしようとするものであります与えることができます。

+0

"プール内のスレッドを呼び出すときと解放したときのあなたのプログラムの内部を知っていますか? - いいえ、私はしません!私のプログラムはサードパーティのライブラリを使用しているからです。 – thorn

+0

@thornこのライブラリのデバッガが必要ですか?それはあなたの問題を作る特別な点ですか?あなたはここで何を解決しようとしていますか? – Aristos

+0

私が望むのは、非同期メソッドを気にする必要があるかどうかを判断するために、サードパーティのライブラリの動作を調べることです。これらのメソッドが共通プールからスレッドをブロックする場合、それらのメソッドを使用してもASP.NETアプリケーションには何のメリットもありません。ライブラリは難読化されているので、私は逆コンパイラで答えを検索したくありません。 – thorn

関連する問題