Estoy tratando de medir, en un programa C#, el uso de la memoria.¿Cómo medir el uso de memoria con C# (como podemos hacer en Java)?
Me gustaría saber el equivalente C# de esta función de Java:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getCommitted()
que representan la memoria total asignada para el montón. Necesito esto para saber el tamaño total de la memoria asignada para mi programa C#.
A continuación, en Java que puede conseguir la memoria utilizada con:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()
Actualmente utilizo esto en C# para obtener memoria utilizada:
Process_Memory = MyProcess.PrivateMemorySize64;
pero no estoy totalmente seguro de que es la equivalente.
Por lo tanto, en resumen, ¿cómo puedo obtener el espacio total asignado para mi aplicación C# y el uso actual a la vez t?
EDIT:
De las respuestas y más investigación que he determinar esto:
la memoria actual en uso
System.GC.GetTotalMemory(false);
Dar el número de bytes currentl y asignado en la memoria administrada. (http://msdn.microsoft.com/fr-fr/library/system.gc.gettotalmemory.aspx)
Este método devuelve un valor bajo y estoy bastante seguro de que no es realmente una representación de toda la memoria en uso como puedo conseguir con getUsed()
en Java. En Java para la misma aplicación, la memoria utilizada comienza en 5 MB y alcanza 125 MB como máximo. Con C# obtengo de 1 a 5 MB con el método anterior.
Parece que:
MyProcess.PrivateMemorySize64; // return ~=25MB
o
MyProcess.WorkingSet64; //return ~=20MB
dar un valor más exacto de toda la memoria en uso. Pero no sé cuál debería usar ...
Para el memoria asignada mundialthis article sugiere utilizar:
Process_MemoryEnd1 = MyProcess.VirtualMemorySize64;
devolverlo siempre el mismo valor lo largo de la Programm, alrededor de 169MB que parece justo en comparación con Java: de 64 MB a 170 MB máx
Todavía estoy en busca de todo lo que encontré una respuesta precisa es muy vaga y no estoy muy familiarizado con la gestión de memoria de Windows, no estoy realmente seguro de undertand los documentos que encontré:/
Sí sé esto, pero dar el tamaño real de los objetos en el montón administrado, es un valor bajo. No creo que esto sea representativo de toda la memoria asignada. –
Entonces, creo que solo necesita usar todas las propiedades de la clase 'Process' si desea memoria asignada sin procesar (es decir, no tiene en cuenta ninguna de las funciones administradas de GC). 'PagedMemorySize64',' PrivateMemorySize64', etc. – Tyson
Gracias, por lo que creo que si solo quiero procesar la memoria total asignada 'PrivateMemorySize64' puede ser suficiente. No entiendo qué es la memoria paginada ... –