vistas una tablas rendimiento recomendaciones queries porque optimizador lenta las daƱan cuello consultas consulta como botella avanzadas agilizar c# performancecounter

c# - una - view lenta mysql



Contador de rendimiento por ID de proceso en lugar de nombre? (2)

Si no le importa un cambio en el registro de toda la máquina, puede configurar Windows para usar el formulario ProcessName_ProcessID para los nombres de instancia de Perf Counter , en lugar de agregar los números 1, # 2, etc.

Cree DWORD HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/PerfProc/Performance/ProcessNameFormat y establezca su valor en 2.

Si sigue con el formulario # 1, # 2, etc., tenga en cuenta que el nombre de instancia para un proceso dado puede cambiar durante la vida útil del proceso .

Estoy rastreando múltiples instancias de la misma aplicación y necesito obtener la memoria y el uso de la CPU de ambos procesos. Sin embargo, no puedo encontrar una manera de usar el contador de rendimiento y saber qué resultado es para qué proceso. He visto que puedo añadir el número 1 y eso al final del nombre para obtener resultados para cada uno, pero eso no me dice cuál es el proceso para el cual.

¿Cómo puedo determinar el ProcessId o pasar el ID de proceso al contador para obtener el resultado de cada proceso con el mismo nombre?

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;


Esta respuesta a una pregunta relacionada podría funcionar:

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 ..."); }