tareas programas procesos mirar memoria esta donde como blanco aparecen administrador .net windows memory memory-management wmi

.net - programas - como mirar el administrador de tareas



¿Cómo calcular el uso de memoria como lo hace el Administrador de tareas? (1)

Win32_PerfFormattedData_PerfProc_Process es la clase correcta. La propiedad de la que extrae es WorkingSetPrivate . No se necesita fórmula / cálculo.

Ok, estoy usando WMI (.net / C #) para recopilar datos constantemente sobre un proceso específico que se está ejecutando en la máquina. Obtengo los datos a través de la clase Win32_PerfFormattedData_PerfProc_Process . Esa clase tiene muchas propiedades, pero las que nos interesan son las siguientes:

uint64 PageFileBytes;

Valor, en bytes, que este proceso ha utilizado en los archivos de paginación. Los archivos de paginación almacenan páginas de memoria utilizadas por el proceso que no están contenidas en otros archivos. Los archivos de paginación son compartidos por todos los procesos y la falta de espacio en los archivos de paginación puede evitar que otros procesos asignen memoria.

uint32 PoolNonpagedBytes;

Valor, en bytes, en el grupo no paginado, un área de la memoria del sistema (memoria física utilizada por el sistema operativo) para objetos que no se pueden escribir en el disco, pero deben permanecer en la memoria física siempre que estén asignados. El PoolNonpagedBytes en Win32_PerfFormattedData_PerfOS_Memory se calcula de forma diferente que la propiedad PoolPagedBytes en Win32_PerfFormattedData_PerfProc_Process, por lo que puede no ser igual al total de PoolPagedBytes para todas las instancias de Win32_PerfFormattedData_PerfProc_Process. Esta propiedad muestra el último valor observado solamente; no es un promedio

uint32 PoolPagedBytes;

Valor, en bytes, en el grupo paginado, un área de la memoria del sistema (memoria física utilizada por el sistema operativo) para objetos que se pueden escribir en el disco cuando no se están utilizando. La propiedad PoolNonpagedBytes en Win32_PerfFormattedData_PerfOS_Memory se calcula de forma diferente que la propiedad PoolPagedBytes en Win32_PerfFormattedData_PerfProc_Process, por lo que puede no ser igual al total de PoolPagedBytes para todas las instancias de Win32_PerfFormattedData_PerfProc_Process. Esta propiedad muestra el último valor observado solamente; no es un promedio

uint64 PrivateBytes;

Valor actual, en bytes, que este proceso ha asignado y que no se puede compartir con otros procesos.

uint64 VirtualBytes;

Tamaño actual, en bytes, del espacio de direcciones virtuales que el proceso está utilizando. El uso del espacio de direcciones virtuales no implica necesariamente el uso correspondiente del disco o de las páginas de la memoria principal. El espacio virtual es finito y, al usar demasiado, el proceso puede limitar su capacidad para cargar bibliotecas.

uint64 WorkingSet;

Número máximo, en bytes, en el conjunto de trabajo de este proceso en cualquier momento. El conjunto de trabajo es el conjunto de páginas de memoria tocadas recientemente por los hilos en el proceso. Si la memoria libre en la computadora está por encima de un umbral, las páginas se dejan en el conjunto de trabajo de un proceso, incluso si no están en uso. Cuando la memoria libre cae por debajo de un umbral, las páginas se recortan de los conjuntos de trabajo. Si se requieren, se restablecen las fallas en el conjunto de trabajo antes de que salgan de la memoria principal.

Actualmente estoy usando el campo WorkingSet para informar el uso de la memoria del proceso. Sin embargo, eso no se alinea con lo que muestra el Administrador de tareas. Intenté con PrivateBytes pero eso tampoco es "correcto". El proceso que la aplicación monitorea es un proceso .NET (si eso es importante) y la aplicación informa que utiliza al menos 100 MB más de memoria que lo que el Administrador de tareas muestra al mismo tiempo.

Entonces, la pregunta es: ¿cuál es la "fórmula" para calcular la mejor aproximación del uso de la memoria del proceso como lo muestra el Administrador de tareas?