如何获得C#中每个处理器的CPU使用率?

如何获得C#中每个处理器的CPU使用率?,c#,performancecounter,system.diagnostics,C#,Performancecounter,System.diagnostics,我想测量每个处理器的cpu使用率 当我运行下面的程序时,我得到实例名2,3,0,1,和\u Total。我想我应该得到0,1,0,\u Total,1,\u Total 结果意味着什么?如何获取每个处理器的总cpu使用率。不是每个核心 class PerfMonitor { static void Main() { var pc = new PerformanceCounter("Processor", "% Processor Time");

我想测量每个处理器的cpu使用率

当我运行下面的程序时,我得到实例名
2
3
0
1
,和
\u Total
。我想我应该得到
0
1
0,\u Total
1,\u Total

结果意味着什么?如何获取每个处理器的总cpu使用率。不是每个核心

 class PerfMonitor
{
    static void Main()
    {
        var pc = new PerformanceCounter("Processor", "% Processor Time");
        var cat = new PerformanceCounterCategory("Processor");
        var instances = cat.GetInstanceNames();

        foreach (var s in instances)
        { 
            pc.InstanceName = s;
            Console.WriteLine("instance name is {0}", s);
        }
    }
}

因为Windows将内核视为处理器,所以这不是一件容易的事情。你可以从尝试开始,但这是一种痛苦

结果意味着什么

您的结果是:

instance name is 2
instance name is 3
instance name is 0
instance name is 1
instance name is 6
instance name is 7
instance name is 4
instance name is 5
instance name is _Total

每个实例都是处理器的逻辑id(包括hyper-V逻辑实例),但最后一个实例是系统上所有处理器的累积实例。

下载OpenHardwareMonitor,它是开源的,包含一个dll,您可以使用它来实现这一点

我不认为操作系统会按CPU进行分解-我看到的每个系统监视器都只有查看每个内核或查看所有内核总和的选项。您有4个处理器内核,因此每个内核和它们的总和都有计数器。很难猜测“0,_Total”是什么意思。也许你有一台双核intel机器,因此由于超线程,它可能会显示4个核,每个核的使用情况作为后续,这表明多核和多CPU之间没有实际区别,因此尝试按CPU分组可能无关紧要。@hans passant。“0,总计”是我从中得到的东西看起来你有8个核。@ericyoung是的,这些是我的,它是4个物理核和4个逻辑核。