如何在 C# 中获取每个核心(四核 cpu)的 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<string, CounterSample>();
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);
}
}
重要的是,你不能依赖本机 .net 计算 100nsInverse 性能计数器(对我来说只返回 0 或 100 ... bug?),但你必须自己计算它,为此你需要每个实例的最后一个 CounterSamples 的存档(实例代表一个核心或这些核心的总和)。
这些实例似乎有一个命名约定:
0,0 - 第一个CPU第一个核心
0,1 - 第一个 cpu 第二个核心
0,_Total - 第一个 cpu 的总负载
_Total - 所有cpu的总负载
(未经验证 - 在进一步调查完成之前不建议依赖它)...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)