Я отслеживаю несколько экземпляров одного и того же приложения, и мне нужно получить память и использование процессора обоими процессами. Однако я, похоже, не могу найти способ использовать счетчик производительности и знать, какой результат для какого процесса. Я видел, что могу добавить # 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;
Этот ответ на связанный вопрос может работать:
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 ...");
}