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

时间:2012-02-13 11:35:13

标签: c#

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

此代码

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

效果很好。该号码对应于Windows“Task Manager中的”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 ..”)。

Processes

2 个答案:

答案 0 :(得分:12)

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

似乎没有一种简单的方法来计算taskmgr使用perfmon计数器显示的值。请参阅this link

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

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

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


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

答案 1 :(得分:8)

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

节省人们的时间:

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