我坚持这个问题: 我想计算处理器使用特定应用程序的百分比,在这种情况下具有29个chrome实例。我感兴趣的是处理器如何消耗总共29个chrome实例。我试过它的代码:
private float GetCpuUsage(string ProcessName)
{
float cpuUsage = 0;
try
{
var ProcName = Process.GetProcessesByName(ProcessName);
var instances = new PerformanceCounter[ProcName.Length];
for (int i = 0; i < instances.Length; i++)
{
using (var TotalCpuUsage = new PerformanceCounter("Process", "% Processor Time", ProcName[i].ProcessName, true))
{
TotalCpuUsage.NextValue();
Thread.Sleep(1000); //for better aproximation cpu
double processNext = Math.Round((double)(TotalCpuUsage.NextValue() / Environment.ProcessorCount), 2);
Console.WriteLine("Processor Cpu:{0}, PidProcess:{1}", processNext, ProcName[i].Id);
cpuUsage += (float)processNext;
}
}
Console.WriteLine("Processor TotalCpu:{0}", cpuUsage);
return cpuUsage;
}
catch (Exception ex)
{
Message.Show(ex.Message + "\r\n" + ex.StackTrace);
return cpuUsage;
}
}
我有这些奇怪的结果:
Processor Cpu:6.51, PidProcess:18496
Processor Cpu:3.55, PidProcess:22056
Processor Cpu:20.54, PidProcess:16920
Processor Cpu:0, PidProcess:19420
Processor Cpu:0, PidProcess:7644
Processor Cpu:0, PidProcess:22500
Processor Cpu:14.07, PidProcess:19644
Processor Cpu:0, PidProcess:22004
Processor Cpu:3.55, PidProcess:23772
Processor Cpu:0, PidProcess:7948
Processor Cpu:6.91, PidProcess:22980
Processor Cpu:14.19, PidProcess:19464
Processor Cpu:0, PidProcess:18428
Processor Cpu:16, PidProcess:19408
Processor Cpu:0, PidProcess:20340
Processor Cpu:20.73, PidProcess:16660
Processor Cpu:9.37, PidProcess:7784
Processor Cpu:7.16, PidProcess:23984
Processor Cpu:0, PidProcess:8156
Processor Cpu:17.91, PidProcess:13272
Processor Cpu:10.1, PidProcess:20228
Processor Cpu:13.35, PidProcess:6568
Processor Cpu:3.55, PidProcess:6452
Processor Cpu:0, PidProcess:11668
Processor Cpu:0, PidProcess:16780
Processor Cpu:7.23, PidProcess:7036
Processor Cpu:0, PidProcess:19712
Processor Cpu:13.7, PidProcess:20316
Processor Cpu:3.45, PidProcess:20296
Processor TotalCpu:191.87
我能以什么方式解决这个问题?怎么做才能得到一些真实的结果
答案 0 :(得分:0)
我认为这里的问题可能是您没有考虑到您的系统有多个核心。您需要将百分比除以系统上可用的核心数。请看下面的链接。 http://www.allenconway.net/2013/07/get-cpu-usage-across-all-cores-in-c.html
答案 1 :(得分:0)
我知道这是一个稍微陈旧的问题,但我想补充一点,这种方法存在一个根本性的缺陷。
使用时间片计算CPU使用率。在上面的代码的情况下,它是在一秒钟的时间内计算的(例如,与任务管理器使用的相同,所以没有任何错误)。
但是,您要为每个进程创建一个PerformanceCounter
实例,而且您几乎只使用一个实例。
实际上这意味着......您在00:00(mm:ss)和00:01再次查询进程(chrome)
,然后在00:01查询(chrome#1)
并且再次在00:02,(chrome#2)
在00:02再次在00:03 ......等等
所以完全有可能当你查询(chrome)
它使用100%CPU时,但是当你查询(chrome#1)
后一秒钟后,前者现在使用0%CPU而后者现在正在使用100%,所以当你添加它们时,你可以获得200%的CPU使用率。
您需要同时查询所有进程才能获得准确的表示。