He estado teniendo problemas de memoria realmente malos con una aplicación ASP.NET. Parece que cada vez que se carga la página, la instancia previa anterior de la página no se elimina de la memoria. Si presiona F5 diez veces, la memoria agrega 10-20MB a la instancia. Durante las pruebas de estrés y rendimiento, esto maximizaría la memoria y el servidor web se bloqueará ...ASP.NET Páginas no eliminadas de la memoria
Ejecuté el perfil de memoria ANTS y confirmó que cada vez que se carga una página, el archivo antiguo permanece en la memoria. Todas mis páginas web ASP.NET también usan una página maestra. De nuevo, si me carga la página 10 veces, luego de 10 casos de la web existe la página, así como 10 casos de la página maestra ...
http://oi51.tinypic.com/21msy2g.jpg
cuanto a los resultados hormigas de perfil, se puede ver que cada recarga de página agrega alrededor de 320 Kb a la memoria, y eso es solo la página web, sin siquiera tener en cuenta la página maestra. Mi aplicación es una aplicación de seguro de vida que captura aplicaciones, por lo que pasa de 30 a 40 páginas. Entonces puedes ver por qué esto es un problema masivo.
¿Cómo podría averiguar qué es lo que mantiene la página en la memoria? No tengo idea de dónde empezar ...: \
Todas mis páginas usan la inyección de Unity and Dependency para registrar el servicio ... No estoy seguro de si debo cancelar el registro de estos servicios después de page_onUnload.
EDITAR
bien, he logrado seguir la expedición hacia abajo. El motivo por el que no se elimina la página (GCollected) se debe a las instancias de servicio de Unity que se registraron pero no se registraron durante la descarga de la página. Esta es la forma en que estoy usando la unidad en mi página:
me inyecto los servicios a través de las propiedades públicas
#region Services
[Dependency]
public ReviewReportService SummaryService { get; set; }
[Dependency]
public Portfolios.PortfolioService PortfolioService { get; set; }
#endregion
A continuación, la página de inicio, que hago la acumulación de la Unidad:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
ApplicationContainer.BuildUp(this.Context, this);
}
Ahora, evidentemente, cuando la página pasa por su ciclo de vida normal y llama a Descargar, no se puede descargar debido a la referencia de inyección de dependencia ... No estoy seguro de cómo cancelar el registro de los servicios (SummaryService, PortfolioService)
Intenté llamar a lo siguiente en OnUnload pero no hace nada:
ApplicationContainer.GetContainer (Context) .Teardown (this);
¿Cómo puedo determinar si tengo una referencia estática a la página? ¿Alguna forma de identificar qué objeto está haciendo referencia a él? – FaNIX