sobre - Huella de memoria.NET EXE
neuropsicologia de la memoria pdf (3)
Incluso una aplicación de Bloc de notas simple en C # consume megabytes de RAM como se ve en el administrador de tareas. Al minimizar la aplicación, el tamaño de la memoria en el administrador de tareas disminuye considerablemente y se realiza una copia de seguridad cuando la aplicación se maximiza.
Leí en alguna parte que el proceso .NET reserva mucha memoria para la asignación del tiempo de ejecución por adelantado. Es por eso que las aplicaciones .NET tienen una huella de memoria más grande para empezar. Pero esta memoria puede ser liberada usando llamadas API de Win32. Una desventaja es que la asignación del tiempo de ejecución se vuelve lenta, ¿es cierto?
El administrador de tareas no muestra el uso real de la memoria para una aplicación .NET. Para ver que casi tiene que poner un contador de rendimiento en la aplicación o utilizar un generador de perfiles.
Lo que se ve en el Administrador de tareas es la memoria de trabajo de una aplicación que incluye un montón de sobrecarga para el marco mismo, que también debe cargarse cuando se carga la aplicación.
TaskManager no se debe usar para medir la huella de memoria de una aplicación .NET.
Cuando se inicia una aplicación .NET, le pide al sistema operativo una porción de memoria que luego segmenta para convertirse en el montón gestionado, la pila y el montón de objetos grandes. Es este trozo total de memoria que TaskManager está informando, que puede o no ser completamente utilizado por .NET. Una vez que una aplicación .NET recibe una porción de memoria, no la liberará hasta que el sistema operativo la solicite, lo que solo ocurrirá cuando el sistema operativo determine que se necesitan más recursos de memoria.
Si desea medir las asignaciones de memoria, debe consultar los distintos contadores del monitor de rendimiento (PerfMon).
Puede usar el código de interoperabilidad para llamar a las API de Win32 para recortar su tamaño de conjunto de trabajo, pero la próxima vez que su aplicación solicite memoria del sistema operativo, el conjunto de trabajo volverá a funcionar y habrá un golpe de rendimiento mientras el sistema operativo asigna y distribuye el memoria y .NET runtime "lo configura".
El motivo de la gran huella de memoria es que el compilador JIT y el motor de Windows Forms se están cargando con su proceso. Para reducir esto, puede hacer lo siguiente:
[DllImport("psapi.dll")]
static extern int EmptyWorkingSet(IntPtr hwProc);
static void MinimizeFootprint()
{
EmptyWorkingSet(Process.GetCurrentProcess().Handle);
}
Esto debería eliminar tanto como sea posible de la huella de su memoria. También puede haber una forma de reducir la cantidad de memoria reservada para la asignación de memoria de tiempo de ejecución.