Mam bardzo złe problemy z pamięcią w aplikacji ASP.NET. Wydaje się, że za każdym razem, gdy strona się ładuje, stare poprzednie wystąpienie strony nie jest usuwane z pamięci. Jeśli naciśniesz klawisz F5 dziesięć razy, pamięć doda 10-20 MB do instancji. Podczas testowania warunków skrajnych i wydajności maksymalizowałoby to pamięć, a serwer WWW ulegnie awarii ...Strony ASP.NET nie zostały usunięte z pamięci
Uruchomiłem profilowanie pamięci ANTS i potwierdziłem, że za każdym razem, gdy strona jest wczytywana, stary instan pozostaje w pamięci. Wszystkie moje strony internetowe ASP.NET również korzystają ze strony wzorcowej. Ponownie, jeśli załadować stronę 10 razy, potem 10 wystąpień w internecie strona istnieje, jak również 10 wystąpień strony wzorcowej ...
http://oi51.tinypic.com/21msy2g.jpg
Patrząc na wyniki mrówki Profiler, można zobaczyć to, że każde ponowne ładowanie strony dodaje około 320Kb do pamięci i to tylko strona internetowa, nawet nie biorąc pod uwagę strony wzorcowej. Moja aplikacja to aplikacja do ubezpieczenia na życie, która przechwytuje aplikacje, więc przechodzi przez około 30-40 stron. Więc możesz zobaczyć, dlaczego jest to masowe proble.
W jaki sposób mogę dowiedzieć się, co jest przechowywane w pamięci? Nie mam pojęcia, od czego zacząć ...: \ Wszystkie moje strony używają wtrysku Unity i Dependency do zarejestrowania usługi ... Nie jestem pewien czy muszę wyrejestrować te usługi po stronie page_onUnload.
EDIT
Dobra, udało mi się śledzić ten problem w dół. Powód, dla którego strona nie jest usuwana (GCollected), jest spowodowana zarejestrowaniem przez instancje usługi Unity, ale zostały one niezarejestrowane podczas wyładowywania strony. W ten sposób używam jedności na mojej stronie:
I wstrzyknąć usług za pośrednictwem publicznych właściwości
#region Services
[Dependency]
public ReviewReportService SummaryService { get; set; }
[Dependency]
public Portfolios.PortfolioService PortfolioService { get; set; }
#endregion
Następnie strona startowych, robię gromadzeniu Unity:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
ApplicationContainer.BuildUp(this.Context, this);
}
Teraz oczywiście kiedy strona przechodzi przez swój normalny cykl życia i wywołuje Zwolnienie, nie może zostać rozładowana z powodu referencji wtrysku zależności ... Nie wiem tylko, jak wyrejestrować usługi (SummaryService, PortfolioService)
Próbowałem wywoływać następujące w OnUnload, ale to nic nie robi:
ApplicationContainer.GetContainer (kontekst) .Teardown (this);
Jak ustalić, czy mam statyczne odwołanie do strony? Jakieś sposoby identyfikacji, który obiekt się do niego odwołuje? – FaNIX