2009-05-09 10 views
17

He estado teniendo algunos problemas para averiguar exactamente cómo obtengo el uso del RAM de un proceso. (¿Cuánto RAM está consumiendo actualmente, no cuánto está reservado, o su máximo o mínimo)Obteniendo el uso de ram de un proceso

Digamos que tengo un proceso que se ejecuta en la tierra trasera, Java.exe, se le permite usar 1024 mb de memoria ram, ¿Cómo puedo saber cuánto RAM está usando actualmente?

Estoy comenzando el proceso yo mismo, así que tengo acceso al objeto Process, solo me gustaría aclarar un poco más qué propiedad es la adecuada para mí.

+0

duplicado posible de [Cómo saber la memoria disponible o usado en C#] (https://stackoverflow.com/questions/750574/how-to- get-memory-available-or-used-in-c-sharp) – Saul

Respuesta

16

Si está completamente interesado en la memoria física, probablemente desee WorkingSet64, que proporciona "la cantidad de memoria física asignada para el proceso asociado". Comprenda que este valor fluctúa constantemente y que el valor que le da esta llamada puede no estar actualizado. También puede estar interesado en PeakWorkingSet64, que proporciona "la cantidad máxima de memoria física utilizada por el proceso asociado".

+4

Tenga cuidado con las [páginas bloqueadas] (http://forum.sysinternals.com/topic23886_post122660.html) que no forman parte del conjunto de trabajo (por extraño que parezca), y [el administrador de tareas estándar tampoco los ve]] (http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe- task-manager-and-the-working-set.aspx) (a pesar de que ciertamente se consumen: D) –

+0

Quiero usar PeakWorkingSet64 para obtener la memoria máxima utilizada por el proceso, pero No sé cuándo obtener esta propiedad para dar el mayor valor de precisión. Creo que el mejor momento para obtener la propiedad es cuando el proceso es "OnExitting", pero la clase Process no tiene este evento. Solo tiene el evento Salir – Andiana

26

He encontrado esto en MSDN y está trabajando

System.Diagnostics.Process proc = assign your process here :-) 

int memsize = 0; // memsize in Megabyte 
PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = proc.ProcessName; 
memsize = Convert.ToInt32(PC.NextValue())/(int)(1024); 
PC.Close(); 
PC.Dispose(); 
+1

esta es la verdadera respuesta –

+1

No creo que deba convertir el número entero, ¿verdad? – Codingale

+0

@Laz probado y el valor devuelto es el más preciso en comparación con el Administrador de tareas. pero para algún proceso multiproceso como google chrome, no se pueden obtener resultados precisos, ¿alguna idea? – Dennis

Cuestiones relacionadas