在C#中获取进程的CPU使用率

我想获得特定进程的CPU使用率..

这段代码

total_cpu = new PerformanceCounter("Processor", "% Processor Time", "_Total"); 

效果很好。 该数字对应于Windows“ 任务管理器 ”中的“CPU使用率”编号。

但以下给了我奇怪的数字……

 process_cpu = new PerformanceCounter("Process", "% Processor Time", "gta_sa"); var process_cpu_usage = (total_cpu_usage.NextValue() / 100) * process_cpu.NextValue(); 

正如你在屏幕截图中看到的(而不是“7”,我得到的是“2,9 ..”)。

流程

实际上,Process \%Processor Time \ Instance计数器返回受监视进程在单个处理器的%User time上使用的时间百分比。 所以限制是你拥有的处理器数量的100%*。

似乎没有一种简单的方法来计算taskmgr使用perfmon计数器显示的值。 看到这个链接 。

还要记住CPU使用率不是固定值,而是计算值:

 ((total processor time at time T2) - (total processor time at time T1) / (T2 - T1)) 

这意味着值取决于T2和T1,因此如果任务管理器使用的T2和T1与程序使用的T2和T1略有不同,则在任务管理器和计算内容之间可能存在差异。


如果您有兴趣,我可以提供一些代码来使用P / Invoke检索此值。 但是会失去性能计数器的好处(例如监视远程进程)。

在与任务管理器进行比较时, 除以处理器/核心数量似乎会产生相当准确的结果。

为了节省人们的时间:

 // This will return the process usage as a percent of total processor utilisation. var processUsage = process_cpu_usage/nextValue() / Environment.ProcessorCount;