2016-03-25 49 views
0

我試圖通過PDH API獲取性能信息。我堅持的問題是我無法將流程實例綁定到計數器實例:實例名稱對於不同的流程實例始終相同。PDH性能計數器實例名稱

例如性能計數器不同svchost進程具有實例名稱svchost#1,svchost#2等等。但是,PDH函數總是隻返回沒有尾隨數字的svchost。

我用PDH_FMT_COUNTERVALUE_ITEM.szName來獲取實例名稱。

我也試過PdhEnumObjectItems()函數沒有運氣:所有返回的實例名稱仍然相同。

回答

0

不幸的是,我不認爲PDH提供了任何方式來區分具有相同名稱的兩個進程之間的區別。

如果這對您造成問題,您可以轉到較低級別的註冊表API。 (PDH是一個試圖簡化性能計數器使用的包裝器,但是V1性能計數器的真實API是RegQueryValueEx,這就是PDH實際使用的讀取V1性能計數器值的過程性能計數器是一個V1計數器。)底層註冊表API提供了PERF_INSTANCE_DEFINITION結構中的信息,其中包含可能有所幫助的UniqueID字段。 (儘管進程性能計數器實際上並沒有將UniqueID設置爲任何有用的東西 - 某些性能計數器將其設置爲很好的值,而其他性能計數器將其設置爲0)。

將來,我希望進程性能計數器在實例名稱中包含PID,並且它將使用PID作爲實例UniqueID,從而解決問題。