日期:2014-05-20  浏览次数:21060 次

WMI查询多实例进程的CPU占用率问题
需求:利用Windows Service查询本地机器上指定名称的进程CPU占用率(可能有多个同名进程运行),以下以notepad为例

使用pm=new PerformanceCounter("Process", "% Processor Time", "notepad")当只有一个进程运行时一切正常(用pm.NextValue得到CPU占用率)
当有多个notepad进程时,用的Dictionary<PID, pm>保存的计数器,经多次实验,发现它们内部使用的仍是一个计数器
当其中一个使用时,要么得到的所有notepad进程的占用率都是零,要么都是实际使用的那个进程的占用率,得到的值相互影响

已尝试new PerformanceCounter("Process", "% Processor Time", "notepad#i") i为1,2,3发现与上面得到的结果一样

怎样得到像任务管理器那样每个进程的CPU占用率呢?

查了一些资料,使用
var searcher = new ManagementObjectSearcher("SELECT IDProcess,PercentProcessorTime,Timestamp_Sys100NS FROM Win32_PerfFormattedData_PerfProc_Process");
查询两次进行比较可以计算得到,但不知为何在我机器上(Win7 64位)Timestamp_Sys100NS 总是空

求达人帮忙?

------解决方案--------------------
我用chrome#1尝试是有区别的,不加#n是总的占有率,#n后刷新其他页面cpu占有率零,刷新该页面cpu占有率马上提升。n应该是从0开始
------解决方案--------------------
学习,
------解决方案--------------------
恩,学习了