webForumDet fria alternativet

När förstörs objekten

.NET

8 svar · 616 visningar · startad av Nickemannen

Medlem sedan aug. 20003 575 inlägg
Frågan#1

En fråga jag funderat lite kring.

När förstörs objekten man skapar när en sida anropas?

Är det så fort sidan laddats klart,
Är det kanske när användarens session har tagit slut?

Medlem sedan dec. 19995 874 inlägg
#2

Det är upp till GC. Men ofta sker det i samband med att objektet inte används längre.

Medlem sedan dec. 200435 inlägg
#3

När det inte finns någon referens till objekten längre så försvinner de.

Medlem sedan jan. 20012 204 inlägg
#4

Croolie skrev:

När det inte finns någon referens till objekten längre så försvinner de.

Nja, de försvinner först när GC körts.

Medlem sedan aug. 20003 575 inlägg
#5

Okej, så jag när sidan har laddats klart och GC kör så tas objektet bort då?

Det går inte att återanvända ett objekt på nästa sida?

Medlem sedan dec. 19996 721 inlägg
#6

Nickemannen skrev:

Okej, så jag när sidan har laddats klart och GC kör så tas objektet bort då?

Det går inte att återanvända ett objekt på nästa sida?

Nej, men det beror inte på att objektet tagits bort av GC, utan på att sidorna i sig är olika instanser som endast lever under "sidexekveringen". Du kan därför återanvända objekt om du lagrar dem någonstans utanför sidobjektet i t.ex. Cache eller Session.

Medlem sedan aug. 20003 575 inlägg
#7

Tackar

Medlem sedan aug. 20003 575 inlägg
#8

För att föra frågan vidare hurvida det är bra eller dåligt att cacha objekt med Session eller Application.

Är det positivt att t.ex. spara ett objekt som tillhandahåller funktioner för att ansluta till databas och hämta information för alla användare (i application dvs). Eller i Session (i session dvs). Eller bör detta objekt skapas varje gång en besökare byter sida?
Problem som kan uppstå är ju att applikationen förväntar sig att det finns ett anslutningsobjekt till databasen och det inte existerar. Då måste ju en koll utföras varje gång.

Fråga om andra objekt.
Hur är det med andra objekt.. t.ex. om man har en välbesökt sida där viss information hämtas ofta. Då kan man ju ha olika slags prioriterings algorithmer för att ha kvar olika objekt i minnet för att snabbare hämta än att läsa i databas. Är detta att föredra eller är jag helt fel ute?

Ett förslag på algorithm är ju att man har de senaste 10 använda objekten i en cache kö. Där det hela tiden är först in sist ut.

Medlem sedan maj 20012 812 inlägg
#9

För att föra frågan vidare hurvida det är bra eller dåligt att cacha objekt med Session eller Application.

Vill du ha pest eller kolera? :)

Session och Applications objekten kräver en vis overhead och prestanda när de används så därför skall de inte användas till höger och vänster. Däremot så kan de hjälpa dig i din programmering då det faktiskt innebär att du har ett ställe att lagra instanser mellan sidorna, och detta kan vara helt avgörande för att din applikation skall fungerar (om du inte tänker persistera ner hela din state till databasen vid varje sidanrop).

Är det positivt att t.ex. spara ett objekt som tillhandahåller funktioner för att ansluta till databas och hämta information för alla användare (i application dvs). Eller i Session (i session dvs). Eller bör detta objekt skapas varje gång en besökare byter sida?

I princip så skulle ditt objekt som hanterar funktioner för anslutning till databasen kunna vara statiska och då behövs ingen instansieringa av objektet. Jag skulle dock inte lagt ett sådant objekt i någon cache, eftersom man vill ha sin databas öppen så kort tid som möjligt och för att vara säker på att alla referenser till dina databasobjekt verkligen skall försvinna så bör objektet dö vid varje sida avslutning.

Problem som kan uppstå är ju att applikationen förväntar sig att det finns ett anslutningsobjekt till databasen och det inte existerar. Då måste ju en koll utföras varje gång.

Din appliaktion skall knappast vara beroende av att det ginns ett anslutningsobjekt instansierat för att fungera, däremot så bör det kunna skapa ett sådan om det behövs. Frågan är nog istället vad du menar med anslutningsobjekt och vad du hade tänkt att lägga för information i det objektet som måste leva mellan olika sidor...

Hur är det med andra objekt.. t.ex. om man har en välbesökt sida där viss information hämtas ofta. Då kan man ju ha olika slags prioriterings algorithmer för att ha kvar olika objekt i minnet för att snabbare hämta än att läsa i databas. Är detta att föredra eller är jag helt fel ute?

Helt klart så bör du cacha sådan information som visas ofta och ändras väldigt sällan, och detta kommer att påverka din prestanda positivt om de slipper läsa från databasen hela tiden och istället kan läsa från minnet.

Ett förslag på algorithm är ju att man har de senaste 10 använda objekten i en cache kö. Där det hela tiden är först in sist ut.

Varför uppfinna hjulet igen, det finns en liknande funktion inbyggt i .net's cache objekt och det kallas för sliddingtime, alltså du berättar hur länge objektet skall leva från varje gång som det efterfrågas. Alltså om du sätter 20 minuter så lever objektet i 20 minuter i cachen och skulle det efterfrågas efter 21 minuter så finns det inte och måste hämtas igen, men om det efterfrågas efter 19 minuter så finns det i cachen och tas därifrån samt att man låter det leva i 20 minuter till.

- M

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)