Требуется создать аналог диспетчера задач. Использование цп процессами отслеживаю с помощью PerformanceCounter. Нашел на сайте microsoft пример и попытался адаптировать со своим классом для инкапсуляции свойств процесса и данных о CPU в одном объекте.
class MyProcess : IDisposable
{
private Process process { get; set; }
private PerformanceCounter performance;
...
public float CPUusage { get { return performance.NextValue(); } }
public MyProcess(Process process)
{
this.process = process;
performance = new PerformanceCounter("Process", "% Processor Time", process.ProcessName, true);
}
public void Dispose()
{
performance.Dispose();
}
}
При отображении заметил что сумарно используется больше 100%. Также при закрытии одного из процессов мое свойство(CPUusage ) выкидывает исключение которое я не могу отловить в коде. Листинг кода отображения перегружен ради табличного стиля, он по сути он неотличим от того что в примере.
Помогите понять как получить нагрузку на процессор конкретным процессом.
Т.к. счетчик \Process(…)\% Processor Time показывает N*100 нагрузки, где N - кол-во ядер процессора, то чтобы использовать усредненную загрузку по всем ядрам нужно использовать счетчик \Processor(…)\% Processor Time:
Подробнее здесь.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости