Прежде всего, я начал изучать C # с 8 месяцев назад, и я не очень хорошо разбираюсь в английском.Поэтому извините, если я скажу что-то, что вы не можете понять.
Теперь я занимаюсь разработкой приложения на C #, которое получает процент использования ЦП.Я хочу получить использование процессора, что все ядра каждую секунду.Затем я использовал класс 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();
}
Я написал метод с классом таймера, который также запускает метод GetCpuUsageEvery1sec как событие.
Однако в категории «Процессор» (или «Счетчик времени процессора»),этот счетчик выбрасывает 0, если я изменяю InstanceName.Таким образом, я не могу получить только 0, если я выполняю метод с классом таймера.
Я думаю, что если я хочу получить правильное использование процессора, я должен сделать экземпляры одинаковыми для числа Core.(И многие пользователи будут использовать это приложение. Поэтому я не могу заранее указать количество ядер.)
В этой ситуации я не могу найти другое решение?