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

Я отслеживаю несколько экземпляров одного и того же приложения, и мне нужно получить память и использование процессора обоими процессами. Однако я, похоже, не могу найти способ использовать счетчик производительности и знать, какой результат для какого процесса. Я видел, что могу добавить # 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;
25
задан JeremyK 2 February 2012 в 16:05
поделиться

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 ...");
}
30
ответ дан 28 November 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: