2009-05-29 63 views
2

我在性能監視API的Vista上遇到了一個奇怪的問題。我目前使用的是基於PdhGetFormattedCounterValue()的在XP/2k上運行良好的代碼。我開始了使用PdhExpandWildCardPath擴展櫃(我感興趣的是整個網絡的統計數據),我在看的計數器是:Vista上的性能計數器問題

 
\\Network Interface(*)\\Bytes Received/sec 
\\Network Interface(*)\\Bytes Sent/sec 
\\Processor(_Total)\\% Processor Time 

的問題是,他們的第一次通話,他們返回PDH_INVALID_DATA,我不不認爲這是一個問題,因爲如果我再次查詢它,我將開始獲取沒有錯誤的數據。問題在於 - 處理器時間與預期完全一致,網絡接口計數器都沒有返回任何內容 - 始終爲0。我使用Perfmon驗證他們正在正常報告數據,所以我不知道可能是什麼問題。我抓住了這個在MS:

http://support.microsoft.com/?scid=kb%3Ben-us%3B287159&x=11&y=9

但是我不感興趣,多語言我的任務,所以我不認爲這是相關的。我會看看是否可以想出一些基本的代碼,顯示我正在做什麼,但沒有什麼會返回任何奇怪的,並且它在XP/2k上工作,所以我懷疑引發了一些變化。謝謝!

回答

1

事實證明,問題是網絡接口都是通配符,而處理器1實際上已經通過性能監視進行了彙總。我沒有意識到的是,它PdhExpandWildCardPath沒有返回可直接由PdhAddCounter使用的東西。通過這個我的意思是,如果ExpandWildCard返回3個擴展匹配,它們會返回爲空字符串 - 我明白這一點,但我曾假設AddCounter會有效地創建一個包含所有三個字符的計數器。不,現實是我需要分解每條路徑並從AddCounter單獨請求它,然後在獲取結果時手動彙總結果。

希望這可以幫助別人避免我以較少的挫折做出的同樣的錯誤。 ;)