如何在C#中获得每个核心的CPU负载?

如何在C#中获得每核心CPU负载(quadcore cpu)?

谢谢 :)

您可以使用WMI或System.Diagnostics名称空间。 从那里你可以获取你想要的任何性能计数器(但是需要一秒钟(1-1.5秒)来初始化它们 – 读取值是可以的,只有初始化很慢)

代码看起来像这样:

using System.Diagnostics; public static Double Calculate(CounterSample oldSample, CounterSample newSample) { double difference = newSample.RawValue - oldSample.RawValue; double timeInterval = newSample.TimeStamp100nSec - oldSample.TimeStamp100nSec; if (timeInterval != 0) return 100*(1 - (difference/timeInterval)); return 0; } static void Main() { var pc = new PerformanceCounter("Processor Information", "% Processor Time"); var cat = new PerformanceCounterCategory("Processor Information"); var instances = cat.GetInstanceNames(); var cs = new Dictionary(); foreach (var s in instances) { pc.InstanceName = s; cs.Add(s, pc.NextSample()); } while (true) { foreach (var s in instances) { pc.InstanceName = s; Console.WriteLine("{0} - {1:f}", s, Calculate(cs[s], pc.NextSample())); cs[s] = pc.NextSample(); } System.Threading.Thread.Sleep(500); } } 

重要的是你不能依赖100ns逆向性能计数器的原生.net计算(对我来说只返回0或100 …… bug?)但你必须自己计算它,为此你需要为每个实例存档最后一个CounterSamples (实例代表核心或这些核心的总和)。

这些实例似乎有一个命名对话:

0,0 – 第一个cpu第一个核心0,1 – 第一个cpu第二个核心0,_总计 – 第一个cpu的总负载_Total – 所有cpu的总负载

(未经核实 – 不建议依赖它,直到进一步调查完成)……

由于核心显示为操作系统的独立CPU,因此您使用相同的代码来确定多处理器计算机中每个CPU的负载。 这里有一个这样的例子(在C中)。 请注意,它使用WMI,因此上面评论中链接的其他线程可能会让您大部分时间都在那里。