Каков правильный счетчик производительности для получения процессора и использования памяти в процессе?

Как я могу получить ЦП и Использование памяти для конкретного процесса с использованием класса .NET PerformanceCounter? А также в чем разница между

Processor\% Processor Time и Process\% Processor Time?

Я немного смущен между этими двумя.

Ответ 1

Из this post:

Чтобы получить весь процессор ПК и память:

using System.Diagnostics;

Затем объявите глобально:

private PerformanceCounter theCPUCounter = 
   new PerformanceCounter("Processor", "% Processor Time", "_Total"); 

Затем, чтобы получить время процессора, просто вызовите метод NextValue():

this.theCPUCounter.NextValue();

Это позволит вам использовать CPU

Как и для использования памяти, то же самое относится, я полагаю:

private PerformanceCounter theMemCounter = 
   new PerformanceCounter("Memory", "Available MBytes");

Затем, чтобы получить использование памяти, просто вызовите метод NextValue():

this.theMemCounter.NextValue();

Для конкретного использования процессора и памяти:

private PerformanceCounter theCPUCounter = 
   new PerformanceCounter("Process", "% Processor Time",              
   Process.GetCurrentProcess().ProcessName);

где Process.GetCurrentProcess().ProcessName - это имя процесса, о котором вы хотите получить информацию.

private PerformanceCounter theMemCounter = 
   new PerformanceCounter("Process", "Working Set",
   Process.GetCurrentProcess().ProcessName);

где Process.GetCurrentProcess().ProcessName - это имя процесса, о котором вы хотите получить информацию.

Обратите внимание, что Рабочий набор может быть недостаточным, чтобы определить "объем памяти" - см. Что такое частные байты, виртуальные байты, рабочий набор?

Чтобы получить все категории, см. Пошаговое руководство: получение категорий и счетчиков

Разница между Processor\% Processor Time и Process\% Processor Time равна Processor от самого ПК, а Process - для отдельного процесса. Таким образом, процессорное время процессора будет использоваться на ПК. Время обработки процесса будет определяться указанным процессом. Полное описание имен категорий: Счетчики производительности монитора

Альтернатива использованию счетчика производительности

Используйте System.Diagnostics.Process.TotalProcessorTime и System.Diagnostics.ProcessThread.TotalProcessorTime свойства для расчета использования вашего процессора, как описано в статье.

Ответ 2

Pelo Hyper-V:

private PerformanceCounter theMemCounter = new PerformanceCounter(
    "Hyper-v Dynamic Memory VM",
    "Physical Memory",
    Process.GetCurrentProcess().ProcessName);