2012-02-02 66 views
1

「.NET CLR LocksAndThreads」類別中的「總競爭數量」和「隊列長度峯值」窗口性能計數器之間的區別是什麼? MSDN文檔可在此處獲得:http://msdn.microsoft.com/en-us/library/zf749bat.aspx.NET鎖性能計數器差異

我想我的困惑是關於「嘗試獲取鎖的線程數量不成功」與「自應用程序啓動以來等待獲取託管鎖的線程總數」之間的差異。從本質上說,等待獲取鎖的區別是什麼?我解釋爲其他人在獲取它時持有它,並嘗試獲取鎖失敗?我能想到的唯一事情與鎖定獲取嘗試的方式有關,例如, Monitor.TryEnter與Monitor.Enter。

+0

我認爲他們是測量不同的東西。爭用是事件的計數,隊列長度是線程的計數。也許爭用是無法立即獲取鎖的次數,隊列長度是無法立即獲取鎖的線程數。 – Luke 2012-02-02 19:50:46

+0

我感到困惑的是,當一個線程無法立即獲取鎖定時,它如何不計入兩次計數 - 換句話說,每次失敗的鎖定獲取都是線程未能立即獲取鎖定的實例,沒有立即獲得鎖的實例。有問題的應用程序的「隊列長度峯值」值爲148,411,而「爭用總數」僅爲255. – user1185281 2012-02-03 13:36:07

+0

我讀到Monitor首先作爲自旋鎖執行,然後經過一定時間後進入等待狀態。也許一個計數器是旋轉鎖定成功的次數,另一個是它失敗的次數。我不知道;文件不清楚。 – Luke 2012-02-03 14:57:58

回答

1

試圖獲取鎖時,我會想到3個場景:
一)資源沒有被其他實體鎖定,立即獲得
二)資源鎖定,但)發佈時間,與延遲
Ç所獲得的資源鎖定,但沒有公佈時,將取得超時

總論點# - 總方案(三)
隊列長度峯值 - 在任何給定時間內的狀態最線程(b)