我想获得特定进程的CPU使用率..
这段代码
total_cpu = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Run Code Online (Sandbox Code Playgroud)
效果很好.该数字对应于Windows" 任务管理器 "中的"CPU使用率"编号.
但以下给了我奇怪的数字......
process_cpu = new PerformanceCounter("Process", "% Processor Time", "gta_sa");
var process_cpu_usage = (total_cpu_usage.NextValue() / 100) * process_cpu.NextValue();
Run Code Online (Sandbox Code Playgroud)
正如你在屏幕截图中看到的(而不是"7",我得到的是"2,9 ..").

ken*_*n2k 12
实际上,Process \%Processor Time\Instance计数器返回受监视进程在单个处理器的%User time上使用的时间百分比.所以限制是你拥有的处理器数量的100%*.
似乎没有一种简单的方法来计算taskmgr使用perfmon计数器显示的值.看到这个链接.
还要记住CPU使用率不是固定值,而是计算值:
((total processor time at time T2) - (total processor time at time T1) / (T2 - T1))
Run Code Online (Sandbox Code Playgroud)
这意味着该值取决于T2和T1,所以有可能是你看到任务管理器什么,你计算一下,如果T2和T1通过任务管理器使用的是比T1和T2的程序中使用略有不同的差异.
如果您有兴趣,我可以提供一些代码来使用P/Invoke检索此值.但是会失去性能计数器的好处(例如监视远程进程).
在与任务管理器进行比较时,除以处理器/核心数量似乎会产生相当准确的结果.
为了节省人们的时间:
// This will return the process usage as a percent of total processor utilisation.
var processUsage = process_cpu_usage/nextValue() / Environment.ProcessorCount;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28896 次 |
| 最近记录: |