2011-03-03 21 views
12

Tengo un número de aplicaciones web ASP.NET (4.0) que parecen tener fugas (una pequeña cantidad) de memoria durante cada solicitud. Es una cantidad tan pequeña, que para la mayoría de los casos de uso, no se convertirá en un problema durante semanas o incluso meses a la vez. Generalmente intento ser bueno cerrando las conexiones administradas por la aplicación, evitando variables de estado (o variables de instancia para mi singleton), etc.¿Debo configurar el grupo de aplicaciones ASP.NET para reciclar automáticamente?

Mi pregunta es: ¿es este comportamiento normal para las aplicaciones ASP.NET? Desactivé el comportamiento predeterminado (IIS 7) de reciclar el grupo de aplicaciones después de 20 minutos de estar inactivo. Lo hago porque la aplicación tarda unos minutos en construir su memoria caché interna, y quiero evitar impactar negativamente la experiencia del usuario (y hacer que esperen a que la aplicación se inicie cuando emiten la solicitud).

Soy consciente de que esto podría mitigarse serializando la memoria caché o acelerando el proceso de generación de la memoria caché, pero mi pregunta tiene más que ver con el principio de la misma: personalmente considero confiar en la función de auto-reciclado de IIS como un método bandaid . ¿Me equivoco? ¿Acaso no estoy viendo el recolector de basura en el trabajo porque el uso de la memoria de la aplicación no es lo suficientemente alto en comparación con la cantidad de memoria disponible? o debería profundizar en los problemas de memoria?

Cualquier apreciación sería apreciada.

+0

Sobre la cuestión de la pérdida de memoria: asegúrese de desechar todos los objetos desechables (IDispose). Puede usar herramientas de análisis de código estático como Gendarme (http://www.mono-project.com/Gendarme) para encontrar este tipo de problemas en el código o utilizar un generador de perfiles en tiempo de ejecución para capturar estos problemas en el tiempo de ejecución. –

Respuesta

8

Lamentablemente es normal, aunque en su mayoría se debe a los escritores de aplicaciones de mala calidad que cualquier otra cosa.

IIS configura por defecto las agrupaciones de aplicaciones recién creadas para reciclar cada 1740 minutos por este motivo.

Como dijiste, esto es una curita. Una aplicación bien escrita que borre todos sus recursos (incluidos los manejadores de eventos colgantes), no debe filtrarse en absoluto.

Ver la publicación del blog this sobre el tema.

Cuestiones relacionadas