17. januar 2011 - 00:28Der 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! ;-)
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.
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! :-)
Synes godt om
Ny brugerNybegynder
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.