2011-01-13 18 views
51

¿Cómo puedo obtener CPU y Uso de memoria de un proceso en particular usando la clase .NET PerformanceCounter? Y también ¿cuál es la diferencia entre¿Cuál es el contador de rendimiento correcto para obtener la CPU y el uso de memoria de un proceso?

Processor\% Processor Time y Process\% Processor Time?

Estoy un poco confundido entre estos dos.

+3

No hay una forma correcta de medir el uso de la memoria. La memoria se puede usar de muchas maneras diferentes. Por ejemplo, ¿cuenta la memoria intercambiada en el disco o en la memoria que está reservada/confirmada pero no se ha escrito todavía? ... – CodesInChaos

Respuesta

91

De this mensaje:

Para obtener toda la PC CPU y uso de memoria:

using System.Diagnostics; 

Entonces declaran a nivel mundial:

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

Luego de obtener el tiempo de CPU, simplemente llame al método NextValue():

this.theCPUCounter.NextValue(); 

Esto le dará el uso de la CPU

cuanto a uso de memoria, lo mismo se aplica creo:

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

luego a que el uso de memoria, simplemente llame al NextValue() método:

this.theMemCounter.NextValue(); 

Para un proceso específico Uso de CPU y memoria:

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

donde Process.GetCurrentProcess().ProcessName es el nombre del proceso sobre el que desea obtener la información.

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

donde Process.GetCurrentProcess().ProcessName es el nombre del proceso que desea obtener la información sobre.

Tenga en cuenta que conjunto de trabajo puede no ser suficiente en sí misma para determinar la huella de memoria del proceso - ver What is private bytes, virtual bytes, working set?

Para recuperar todos los tipos disponibles, consulte Walkthrough: Retrieving Categories and Counters

La diferencia entre Processor\% Processor Time y Process\% Processor Time es Processor es de la propia PC y Process es por proceso individual. Entonces, el tiempo del procesador del procesador sería el uso en la PC. El tiempo del procesador de un proceso sería el uso de procesos especificado. Para una descripción completa de nombres de categorías: Performance Monitor Counters

Una alternativa al uso del contador de rendimiento

Uso System.Diagnostics.Process.TotalProcessorTime y System.Diagnostics.ProcessThread.TotalProcessorTime propiedades para calcular el uso del procesador, ya que article describe.

+1

¿Pero dará el uso actual de CPU/Mem del que se llama la función? –

+0

El uso de la memoria no está disponible en la memoria. ¿Cómo obtengo los megabytes, no disponibles? –

+1

Si creo el contador de CPUC como el anterior obtengo una InvalidOPerationException: "No se pueden cargar los datos del nombre del contador porque se leyó un índice no válido" del registro. " – Ted

3

Pelo Hyper-V:

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