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