He estado solucionando algunas pérdidas de memoria en mi aplicación WPF. Para hacerlo, utilicé el generador de perfiles CLR, así como también las estadísticas de los procesos en el Administrador de tareas de Windows. Mi prueba básica fue asegurarme de que cuando se cerraba cierta ventana, todavía no se quedaba en la memoria.¿Debo forzar manualmente la recolección de basura en mi aplicación WPF?
Soy un poco nuevo en el desarrollo de Windows, y al principio me confundí porque en una simple aplicación de prueba, parecía como si no importara qué, mis ventanas siempre permanecían en la memoria después de cerradas. Pero finalmente me di cuenta de que esto no significaba que había una pérdida de memoria, sino simplemente que aún no se habían recogido basura. Así que tuve que crear un botón en mi ventana principal conectado a un controlador de eventos que contenía código para forzar manualmente la recolección de basura. Recolectando manualmente la basura, pude completar mis pruebas de pérdida de memoria, y lo tengo todo ordenado.
Pero me hizo pensar - ¿Hay alguna vez una necesidad de forzar manualmente la recolección de basura?
Me duele ver cómo el consumo de memoria de mi aplicación aumenta y aumenta a medida que abro y cierro ventanas. Por supuesto, finalmente, la recolección de basura se ejecuta automáticamente y todo se soluciona. Pero casi parece una buena idea recolectar manualmente basura después de que se cierran estas pesadas ventanas. Pero, ¿hay algún punto? Me da la sensación de que las pruebas de un lado, no se supone que forzar la recolección de basura, simplemente deje que el sistema lo resuelva.
Pensamientos apreciados.
+1 para "si hay pérdida de memoria, incluso llamando a la fuerza el GC no ayuda". Ese es un muy buen punto ... los objetos filtrados no son candidatos para la recolección de basura. – NateTheGreat