【发布时间】:2018-10-15 03:02:18
【问题描述】:
首先,我从 8 个月前开始学习 C#,而且我的英语不太好。所以如果我说了一些你听不懂的话,我很抱歉。
现在,我正在使用 C# 开发获得 CPU 使用百分比的应用程序。 我想每隔一秒获得所有核心的 CPU 使用率。然后我使用了 PerformanceCounter 类和处理器类别。这是我写的代码。
private void GetCpuUsageEvery1sec(object sender, ElapsedEventArgs e)
{
int getValue = 0;
mProcessorCount = Environment.ProcessorCount;
mPerformanceCounter.CategoryName = "Processor";
mPerformanceCounter.CounterName = "% Processor Time";
mPerformanceCounter.InstanceName = "_TOTAL";
getValue = (int)Math.Truncate(mPerformanceCounter.NextValue());
mProcessorCpuUsage[mProcessorCount] = getValue; //I set TOTAL's usage in last of Array
Console.WriteLine(DateTime.Now.ToString());
Console.WriteLine("Core:TOTAL {0}%", mProcessorCpuUsage[mProcessorCount]);
for (int count = 0; count < mProcessorCount; count++)
{
mPerformanceCounter.InstanceName = count.ToString(); //this code is case
getValue = (int)Math.Truncate(mPerformanceCounter.NextValue());
mProcessorCpuUsage[count] = getValue;
Console.WriteLine("Core:{0} {1}%", count, mProcessorCpuUsage[count]);
}
Console.WriteLine();
}
我编写了带有 Timer 类的方法,它也将 GetCpuUsageEvery1sec 方法作为事件启动。
但是,在处理器类别(或处理器时间计数器)中,如果我更改 InstanceName,此计数器会抛出 0。 因此,如果我使用 Timer 类执行方法,我不能只得到 0。
我认为如果我想获得正确的 CPU 使用率,我应该使实例的核心数量相同。 (而且很多用户会使用这个应用程序。所以我不能提前指定Core的数量。)
在这种情况下,我无法得到其他解决方案?
【问题讨论】:
-
Mr.Dennis Kuypers 谢谢您的建议!我忽略了那个内容。但如果可能的话,我不想使用很多实例。例如,我使用 wmi。
-
我不想使用很多实例,因为应用程序用户可能有很多很多内核。如果我得到你的任何建议,我会很高兴的。
标签: c# cpu-usage performancecounter