Как я могу получить нагрузку процессора на kernel ​​в C #?

Как я могу получить загрузку процессора на kernel ​​(quadcore cpu), в C #?

Благодаря 🙂

Вы можете использовать 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(); 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 для меня … ошибка?), Но вы должны сами его вычислить и для этого вам нужен архив последних CounterSamples для каждого экземпляра (экземпляры представляют собой kernel ​​или сумму этих ядер).

Кажется, что для таких экземпляров есть именование:

0,0 – первое kernel ​​первого процессора 0,1 – первое второе процессорное kernel ​​0, _ Общая – общая нагрузка первого процессора _Total – общая нагрузка всего cpus

(не проверено – не рекомендовал бы полагаться на него до дальнейшего расследования) …

Поскольку ядра отображаются как отдельные процессоры для ОС, вы используете тот же код, который вы использовали бы для определения нагрузки на процессор на многопроцессорной машине. Один из таких примеров (в C) приведен здесь . Обратите внимание, что он использует WMI, поэтому другой stream, связанный с комментариями выше, вероятно, имеет большую часть пути.

Давайте будем гением компьютера.