2012-02-02 6 views
1

「.NET CLR LocksAndThreads」カテゴリの「Contentions」および「Queue Length Peak」ウィンドウの合計パフォーマンスカウンタの違いは何ですか? MSDNのドキュメントは、http://msdn.microsoft.com/en-us/library/zf749bat.aspxから入手できます。.NETロックのパフォーマンスカウンタの相違

私の混乱は、「ロックを取得しようとしたスレッドの数」と「アプリケーションが起動してからマネージドロックを取得するのを待っていたスレッドの総数」の違いだと思います。本質的に、私はそれを取得しようとすると、他の誰かがそれを保持していると解釈し、ロックを取得するのを待つ間の違いは何ですか、失敗したロックを取得しようとしている?私が考え得る唯一のことは、ロック取得がどのように試みられるかに関連することです。 Monitor.TryEnterとMonitor.Enterを比較します。ロックを取得しようとしたとき、私は3つのシナリオを考えます

+0

は、私は彼らがいると思います異なるものを測定する。 Contentionsはインシデントの数であり、Queue Lengthはスレッドの数です。多分、競合はすぐにロックを獲得できなかった回数であり、キュー長はすぐにロックを獲得できなかったスレッドの数です。 – Luke

+0

私が混乱しているのは、スレッドが両方のカウントにカウントされない方法ですぐにロックを取得できない場合です。つまり、失敗したロック取得のそれぞれは、ロックをすぐに取得できないインスタンスと、ロックのインスタンスはすぐに取得できません。問題のアプリケーションでは、「キュー長のピーク」の値が148,411で、「競合の総数」は255にすぎません。 – user1185281

+0

このモニターは最初にスピンロックとして実装されていますが、一定の時間が経過すると待機状態。おそらく1つのカウンタはスピンロックが成功した回数であり、もう1つは失敗した回数です。私は分かりません。ドキュメントは明確ではありません。 – Luke

答えて

1

:遅延ロック
c)のリソースを取得し
はありません、他のエンティティによってロック A)リソース、取得直後に
b)のリソースロックが、時間にリリースされ、しかし、時間に解放されない、競合の

合計#アウト取得時間 - シナリオの合計(C)
キューの長さのピーク - 状態の任意の時点で、ほとんどのスレッド(b)は

関連する問題