2012-06-20 9 views
6

Mi stavo chiedendo questo l'altro giorno. Non sono esattamente sicuro di come ASPX gestisca lo smaltimento dei rifiuti, ma per quanto ne so il "caricamento completato" non rimuove i valori di memoria statica o dopo che la pagina è stata ricaricata. Statico almeno in termini di C significa che l'allocazione di memoria segue il tuo programma fino a quando il programma stesso non viene spento. È allo stesso modo in ASPX? Se ho un valore statico e vado dalla pagina A alla pagina B, il valore statico è ancora persistente nella RAM finché non lascia l'applicazione o tale valore viene rimosso una volta che non sono più nella pagina A? (andare su un altro sito Web rimuovendo la propria istanza dal pool di applicazioni nel server).Oggetti statici in ASP.NET uno spreco di memoria?

Da quello che ho vissuto:

public static class foo 
    { 
     public static int x; 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     foo.x++; //This will continue to increment from the last value before reload 
    } 
+0

http://stackoverflow.com/questions/1714064 –

+0

http://stackoverflow.com/questions/1563171 –

+0

http://stackoverflow.com/questions/3814608 –

risposta

5

classi statiche dovrebbero essere evitati in ASP.NET. Restano in memoria fino al riavvio dell'applicazione e sono soggetti a numerosi errori di concorrenza e condizioni di gara.

E la chiusura di una sessione utente (sessione browser) non riavvia l'applicazione! Rimangono in memoria anche se un utente lascia e ritorna. Quindi davvero davvero evitare le lezioni statiche!

+0

Avete un articolo o di riferimento di qualche tipo che tocca di più su questo argomento? Sarei interessante per saperne di più. –

+0

Guarda i link che puoi trovare nei commenti della tua domanda. Puoi anche guardare qui http://bytes.com/topic/c-sharp/answers/878381-static-variable-hell-asp-net e qui http://www.foliotek.com/devblog/avoid-static- variables-in-asp-net/StackOverFlow ha anche molti post. –

+2

Si noti che A VOLTE È possibile che sia necessario utilizzare variabili statiche se è veramente necessario condividere le informazioni tra l'intera applicazione. Ma preferirei usare un Singleton in questo caso. –

0

questo è il vostro modello di esecuzione CLR standard, è diverso per asp.net. Gli oggetti statici sono considerati le radici dell'applicazione e non sono raccolti.

Questo è un vecchio articolo su come la raccolta dei rifiuti funziona in .net, ma penso che tutti i principi sono sempre gli stessi: http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

Problemi correlati