使用PDH效能計數器獲取CPU使用率網絡卡資訊等

2021-07-05 22:37:23 字數 1589 閱讀 2153

使用pdh包含標頭檔案pdh.h 庫可以用#pragma comment(lib,"pdh.lib")載入

通常步驟為開啟查詢,新增查詢,查詢的收集,取值。下面的是cpu使用率

hquery query;

double cpuusage;

pdh_status status = pdhopenquery(null, null, &query);

if (error_success != status)

hcounter counter;

status = pdhaddcounter(query, _text("\\processor information(_total)\\% processor time"), null, &counter); //%號和p之間要有空格

if (error_success != status)

pdhcollectquerydata(query);

sleep(1000); //這裡要有延時不然結果相當不準確

pdhcollectquerydata(query);

pdh_fmt_countervalue pdhvalue;

dword dwvalue;

status = pdhgetformattedcountervalue(counter, pdh_fmt_double, &dwvalue, &pdhvalue);

if(error_success != status)

cpuusage = pdhvalue.doublevalue;

pdhremovecounter(counter);

pdhclosequery(query);

網絡卡的差不多要考慮的是可能有多網絡卡的情況

pdh_status status;

vectorcounter;

hquery query;

pdh_fmt_countervalue fmtvalue;

lpdword dwctrtype = null;

status = pdhopenquery (0, 0, &query);

if(error_success != status)

for(vector::iterator iter = inte***cename.begin();iter != inte***cename.end();++iter) //遍歷網絡卡加入不同counter統計不同的網絡卡

counter.push_back(mcounter); }

double traffic = 0;

status = pdhcollectquerydata(query);

if(status == no_data)

pdhremovecounter(*iter); //刪除效能計數器

}

這裡要注意的是網絡卡名稱一定是

網絡卡名是效能下面的網絡卡名而不是裝置管理器下的網路設配器的名字。這兩個名字可能是不一樣的。

效能計數器還可以取得記憶體以及硬碟的情況

效能計數器之CPU

processor processor time 閥值 處理器的閥值一般設為85 含義 這個計數器是處理器活動的主要指標。高數值並不一定是壞事,但是如果其他處理器相關的計數器 比如 privileged time 或者processor queue length 線性增加的話,高cpu使用率就值得調...

關於WCF的效能計數器

公司的專案的服務端採用wcf,現在使用者反應系統響應慢 其實系統高峰期頂多100個人在用 現在boss讓我查查效能的瓶頸在哪。由於wcf的配置檔案只自定義的 採用這樣的框架現在我在myservicehost.cs 這個類裡新增servicemodel.diagnostic.performanceco...

Windows效能計數器監控實踐

windows效能計數器 performance counter 是windows提供的一種系統功能,它能實時採集 分析系統內的應用程式 服務 驅動程式等的效能資料,以此來分析系統的瓶頸 監控元件的表現,最終幫助使用者對系統進行合理調優。市面上採集windows效能計數器指標的產品參差不齊,尤其在處...