¿Por qué la gente piensa que una pérdida de memoria en .NET no es igual que cualquier otra pérdida?
Una pérdida de memoria es cuando se conecta a un recurso y no lo suelta. Puede hacerlo tanto en codificación administrada como no administrada.
En cuanto a .NET y otras herramientas de programación, ha habido ideas sobre la recolección de basura y otras formas de minimizar las situaciones que harán que su aplicación se escape. Pero el mejor método para evitar fugas de memoria es que necesita comprender su modelo de memoria subyacente y cómo funcionan las cosas en la plataforma que está utilizando.
Creer que el GC y otras magias limpiarán su desorden es el camino corto a las pérdidas de memoria, y será difícil de encontrar más adelante.
Al codificar no administrado, normalmente asegúrese de limpiar, usted sabe que los recursos que se apoderan de usted serán su responsabilidad de limpiar, no del conserje.
En .NET, por otro lado, mucha gente piensa que el GC lo limpiará todo. Bueno, hace algo por ti, pero debes asegurarte de que sea así. .NET envuelve muchas cosas, por lo que no siempre se sabe si se trata de un recurso gestionado o no gestionado, y debe asegurarse de qué está tratando. El manejo de fuentes, recursos de GDI, directorio activo, bases de datos, etc. suele ser algo que debe tener en cuenta.
En términos administrados Pondré mi cuello en la línea decir que no desaparezca una vez el proceso se mata/eliminado.
Veo que mucha gente tiene esto sin embargo, y realmente espero que esto termine. ¡No puedes pedirle al usuario que finalice tu aplicación para limpiar tu desorden! Eche un vistazo a un navegador, que puede ser IE, FF, etc., luego abra, por ejemplo, Google Reader, déjelo permanecer unos días y observe lo que sucede.
Si luego abre otra pestaña en el navegador, navega hacia algún sitio, luego cierra la pestaña que albergaba la otra página que hizo que el navegador se filtre, ¿cree que el navegador liberará la memoria? No es así con IE. En mi computadora IE fácilmente comerá 1 GiB de memoria en un corto período de tiempo (alrededor de 3-4 días) si utilizo Google Reader. Algunas páginas de noticias son aún peores.
Oh, te gusta el libro, ¿o sí? He visto al autor aparecer en stackoverflow de vez en cuando. –
Algunos objetos .NET también pueden rootearse y volverse incobrables. Todo lo que es IDisposable debe ser eliminado debido a esto. – kyoryu
@kyoryu: ¿Cómo se enraíza un objeto? –