使用性能计数器的任务管理器中的CPU使用率

Ron*_*wal 0 c# windows performance performancecounter cpu-usage

[我的尝试]

已经经历了

  1. 如何在C#中获取CPU使用率? 但是,“ _ Total”处理器实例将给我CPU的总消耗,而不是特定的应用程序或“进程”

  2. 在C#程序中,我试图获取该应用程序的CPU使用率,但它始终显示为100

  3. 任务管理器中的CPU时间到底是什么?,对此进行了解释,但没有说明如何获取此值。

参考http://social.technet.microsoft.com/wiki/contents/articles/12984.understanding-processor-processor-time-and-process-processor-time.aspx之后

收到

TotalProcessorTimeCounter = new PerformanceCounter("Process", "% Processor Time", processName);
Run Code Online (Sandbox Code Playgroud)

基线为(逻辑CPU数量* 100)基本上,这不能使我超出CPU消耗100%的比例。

尝试在任务管理器中进行挖掘,发现任务管理器->处理器-> CPU使用量的等级为100。

Processor \%Processor Time对象不使用进程名称作为输入。它只有“ _Total”作为输入。

[题]

对于多核系统的特定进程,如何使用性能计数器(范围为100)获取此数据(CPU消耗)?

Seç*_*gay 6

如果您使用它,您可以通过任务管理器获得相同的结果:

cpuCounter = new PerformanceCounter(
        "Processor Information",
        "% Processor Utility",
        "_Total",
        true
    );
Run Code Online (Sandbox Code Playgroud)


J. *_*ell 5

在阅读了此性能计数器文档https://social.technet.microsoft.com/wiki/contents/articles/12984.understanding-processor-processor-time-and-process-processor-time.aspx之后,我意识到正确的方法得到这个值实际上是花费100并减去所有处理器的空闲时间。

处理器时间百分比是处理器执行非空闲线程所花费的时间的百分比。

var allIdle = new PerformanceCounter(
    "Processor", 
    "% Idle Time", 
    "_Total"
);

int cpu = 100 - allIdle;
Run Code Online (Sandbox Code Playgroud)

这给出的值非常接近任务管理器显示的值,并且可能仅由于舍入或轮询计数器的特定时间而在某些时候有所不同。