1
因此,我的工作場所終於開始用Windows 7取代Windows NT 4系統。而且我必須確保我們的舊程序可以在新系統上運行。升級到Windows 7打破了性能計數器
不是一個「性能檢查」服務,可以跟蹤內存,CPU,磁盤和網絡使用情況。它很大程度上依賴於性能計數器。
我的問題是,在新的Windows 7框中,某些性能計數器不再有效:嘗試讀取該值時出現PDH_INVALID_DATA
錯誤。這個問題特別影響下面的計數器:
\Network Interface(*)\Bytes Total/sec
\PhysicalDisk(_Total)\% Disk Time
\PhysicalDisk(_Total)\Avg. Disk Queue Length
\PhysicalDisk(_Total)\Disk Transfers/sec
\Processor(_Total)\% Processor Time
\Server\Bytes Total/sec
但在同一程序中使用做工作(一些小的修改後應對「TCP」櫃檯被分成「TCPv4」和「TCPv6」)櫃等。
\Memory\Commit Limit
\Memory\Committed Bytes
\Process(_Total)\Thread Count
\TCPv4\Connections Established
\TCPv4\Segments/sec
所涉及的代碼(僅顯示了性能計數器的一個簡化的)是:
HQUERY hQuery;
HCOUNTER hCPUUsed;
DWORD dwType;
PDH_FMT_COUNTERVALUE stCounter;
lStatus = PdhOpenQuery(NULL, 0, &hQuery); // This same HQUERY object is used for all PDH calls
// ... error handling
lStatus = PdhAddCounter(hQuery, "\\Processor(_Total)\\% Processor Time", 0, &hCPUUsed);
// ... error handling
lStatus = PdhGetFormattedCounterValue(hCPUUsed, PDH_FMT_DOUBLE, &dwType, &stCounter);
// ... error handling, logging a PDH_INVALID_DATA error from the above line
我嘗試運行lodctr /r
重建性能計數器,但未能解決問題。
在NT 4.0和6.1之間引起了這些性能計數器不再工作的內幕之下做了些什麼改變?我怎樣才能讓他們工作?