您可以使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
重要的是你不能依赖100ns逆向性能计数器的原生.net计算(对我来说只返回0或100 ...... bug?)但你必须自己计算它,为此你需要为每个实例存档最后一个CounterSamples (实例代表核心或这些核心的总和).
这些实例似乎有一个命名对话:
0,0 - 第一个cpu第一个核心0,1 - 第一个cpu第二个核心0,_总计 - 第一个cpu的总负载_Total - 所有cpu的总负载
(未经核实 - 不建议依赖它,直到进一步调查完成)......
| 归档时间: |
|
| 查看次数: |
7894 次 |
| 最近记录: |