2009-01-20 14 views
26

Estoy automatizando algunas tareas de creación de perfiles y quiero registrar el espacio dinámico y los tamaños de generación en tiempo real. El profiling API parece terriblemente complicado para lo que necesito, y parece escuchar las asignaciones y colecciones individuales, lo cual no es tan importante para mí. Las herramientas de creación de perfiles son de gran ayuda, por supuesto, pero estaba buscando una interfaz más flexible y programable.¿Hay alguna manera de recuperar el uso de la memoria actual de una aplicación C#?

Respuesta

39

El término 'uso actual de memoria' está un poco definido. ¿Te refieres al conjunto de trabajo? Lo que sea que signifique, puede usar diferentes propiedades como VirtualMemorySize, WorkingSet, PrivateMemorySize, etc. de la clase de proceso para recuperarlo.

long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64; 
6

Existen contadores de rendimiento para muchas de estas cosas y si no puede usar Perfmon, puede acceder a los contadores a través de la API de diagnósticos.

3

Una vez que tenía que encontrar una pérdida de memoria en un código heredado, me encontré con esta solución: Inicio "lista de tareas" con parámetros adecuados como un proceso y leer la salida ya sea de corriente o de archivo.

p. Ej.

tasklist /fi "IMAGENAME eq notepad++.exe" /FO CSV /NH 

de salida es:

"notepad++.exe","7132","Console","1","21.004 K" 

No es que elegante, pero funciona en cualquier lenguaje de programación en Windows sin dependencias adicionales (C++/Qt en mi caso).

Cuestiones relacionadas