Avatar billede Mcoroklo Nybegynder
17. januar 2011 - 00:28 Der er 1 kommentar og
1 løsning

ASP:NET Sessions og event handler - Memory leak

Jeg har en klasse der har en række events. Jeg gemmer denne klasse i sessions da den skal bruges på mange af mine sider.

Jeg har nu det problem at jeg på min side, UserOverview.aspx, hooker en række af disse events op i OnInit eventet. Problemet er nu bare at siden er i et updatepanel, hvilket gør at disse events blivet hooket up hver gang. Det resulterer i at der gemmes UI elements i min session, hvilket så resulterer i et kæmpe memory leak.

I min profiler kan jeg se at min applikation går fra 5mb->100mb på hvad der svarer til minutter.

Hvordan håndterer jeg problemet? Jeg skal jo stadigvæk lytte til mine events, men jeg kan godt lide at min server samtidig virker! ;-)

Thanks!
Avatar billede keysersoze Guru
17. januar 2011 - 07:53 #1
Det er svært at gætte på uden lidt kode, men et par gæt kunne være at du i den oninit kiggede på enten om siden var i postback eller callback og altså kun udførte kode når nødvendigt (fx page.ispostback), kiggede på hvilken control der lavede kaldede så du vidste hvilken kode der var nødvendig eller kiggede på en smartere AJAX-løsning (fx vha jquery) hvis det kan passes ind i dit behov.
Avatar billede Mcoroklo Nybegynder
10. februar 2011 - 13:42 #2
Løsningen var at gøre følgende:

protected void Page_UnLoad(object sender, EventArgs e)
{
    Player p = Session["player"] as Player;
    p.NewLevel -= new Action<Player>(p_NewLevel);
}

Kort sagt lave et unload event som fjerner eventet igen! :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester