Подтвердить что ты не робот

Счетчик производительности по идентификатору процесса вместо имени?

Я отслеживаю несколько экземпляров одного и того же приложения и должен использовать память и процессор для обоих процессов. Тем не менее, я не могу понять, как использовать счетчик производительности и знать, какой результат для этого процесса. Я видел, что я могу добавить # 1 и так далее в конец имени, чтобы получить результаты для каждого, но это не говорит мне, какой из них для какого процесса.

Как я могу определить ProcessId или передать идентификатор процесса на счетчик, чтобы получить результат для каждого процесса с тем же именем?

PerformanceCounterCPU.CategoryName = "Process";
PerformanceCounterCPU.CounterName = "% Processor Time";
PerformanceCounterCPU.InstanceName = proc.ProcessHandle.ProcessName;

PerformanceCounterMemory.CategoryName = "Process";
PerformanceCounterMemory.CounterName = "Working Set - Private";
PerformanceCounterMemory.InstanceName = proc.ProcessHandle.ProcessName;
4b9b3361

Ответ 1

Этот ответ на соответствующий вопрос может работать:

private static string GetProcessInstanceName(int pid)
{
  PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");

  string[] instances = cat.GetInstanceNames();
  foreach (string instance in instances)
  {

     using (PerformanceCounter cnt = new PerformanceCounter("Process",  
          "ID Process", instance, true))
     {
        int val = (int) cnt.RawValue;
        if (val == pid)
        {
           return instance;
        }
     }
  }
  throw new Exception("Could not find performance counter " + 
      "instance name for current process. This is truly strange ...");
}

Ответ 2

Если вы не возражаете за изменение реестра на компьютере, вы можете настроить Windows на использование формы ProcessName_ProcessID для имен экземпляров Perf Counter, вместо добавления # 1, # 2 и т.д.:

Создайте DWORD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance\ProcessNameFormat и установите для него значение 2.

Если вы придерживаетесь формы # 1, # 2 и т.д., остерегайтесь, что имя экземпляра для данного процесса может измениться в течение процесса !