In ASP.NET se gli elementi vengono lasciati nello stato di sessione che Implement IDisposable ma non vengono mai specificamente rimossi e eliminati dall'applicazione quando la sessione scade sarà Dispose essere richiamato sugli oggetti che qualsiasi codice in Dipose () verrà eseguito?Sessione contenente elementi che implementano IDisposable
risposta
Se il modello IDisposable
è implemented properly, allora sì (vale a dire che il distruttore della classe si occuperà di smaltire l'oggetto). Non credo che il gestore di sessione ASP.NET abbia garanzie circa la chiamata esplicita Dispose()
alle classi che implementano IDisposable
.
Nota che nonostante le obiezioni aggressive di Mark, non sto suggerendo di aggiungere "regolarmente" i finalizzatori. Sto semplicemente suggerendo che se si vuole il metodo Dispose
sul tuo oggetto chiamato quando scade la sessione, questa è una valida opzione.
Un finalizzatore è * non * un'implementazione corretta IDisposable; piuttosto, qualcosa con un finalizzatore può spesso anche essere IDisposable. Ma un oggetto IDisposable non dovrebbe avere un finalizzatore solo perché è IDisposable. –
Non pensavo che fosse "aggressivo" - semplicemente che un finalizzatore non ha nulla a che fare se IDisposable è "implementato correttamente" –
Direi di lasciare un commento negativo sulla mia risposta, travisare la mia risposta e creare la tua risposta che ribadisce che il tuo disaccordo si qualifica come "un'obiezione aggressiva". Ognuno di questi sarebbe stato sufficiente in sé e per sé. Immagino che non dovremo essere d'accordo anche su questo. –
Non sarei d'accordo con la risposta di Sean; in primo luogo, i finalizzatori dovrebbero non essere aggiunti di routine alle classi, anche se sono IDisposable
- i finalizzatori devono essere utilizzati solo in classi che rappresentano risorse non gestite. Viceversa, una classe con un finalizzatore spesso è anche IDisposable
.
Re la domanda: è Dispose()
chiamato - no, non lo è. L'oggetto sarà garbage collection in futuro (indeterminato), ma questo è tutto. Un finalizzatore non aggiungerebbe molto qui, dal momento che tutti gli oggetti incapsulati saranno già idonei per la raccolta (supponendo che non vengano citati altrove).
Sarei preoccupato di avere oggetti usa e getta in sessione. Creerà quasi sicuramente un problema di scalabilità per te. Tutto ciò che è Usa e getta è probabilmente connesso ad alcune risorse limitate, se hai molte sessioni attive probabilmente utilizzerai quella risorsa. In secondo luogo, mi aspetto che molti (la maggior parte?) Oggetti usa e getta non funzionino bene in una web farm poiché la risorsa a cui sono legati è probabilmente locale a una singola macchina e non serializzeranno e quindi deserializzeranno su un'altra macchina nella stessa stato.
- 1. Come trovare tutte le classi che implementano IDisposable?
- 2. Catena IDisposable
- 3. Esiste un elenco di oggetti comuni che implementano IDisposable per l'istruzione using?
- 4. Controllo degli oggetti che implementano IDisposable ma non sono disposti correttamente
- 5. In che modo le rotaie implementano before_filter?
- 6. Tipizzazione implicita di array che implementano interfacce
- 7. In che modo i browser moderni implementano JS Array, in particolare aggiungendo elementi?
- 8. contenitori CIO e IDisposable
- 9. interfaccia Autofac e IDisposable
- 10. Perché Enumerable.Range Implement IDisposable?
- 11. Come implementare correttamente IDisposable
- 12. StructureMap InstanceScope.Hybrid e IDisposable
- 13. Utilizzando invariante per IDisposable
- 14. GC.SuppressFinalize IDisposable (this) location
- 15. Quando devo implementare IDisposable?
- 16. Come gestire gli oggetti IDisposable che sono memorizzati nella cache?
- 17. Rimozione di elementi da un elenco contenente caratteri specifici
- 18. Come leggere un file JSON contenente più elementi di root?
- 19. Come cercare un array contenente elementi struct in Swift?
- 20. Java classe che estende contenente metodo main
- 21. Iniettare tutti i servizi che implementano alcune interfacce
- 22. stesso metodo per più classi che implementano la stessa interfaccia
- 23. In che modo i client Redis implementano il pipelining?
- 24. Esistono classi standard Java che implementano Iterable senza implementare Collection?
- 25. Ricerca di librerie che implementano l'ottimizzazione minima sequenziale in C++
- 26. Enumerare tutte le classi Delphi che implementano una determinata interfaccia?
- 27. Trovare tutte le classi che implementano un'interfaccia specifica
- 28. Ottieni tutti i bean che implementano un'interfaccia generica in primavera
- 29. Ninject legano tutte le classi che implementano la stessa interfaccia
- 30. È possibile trovare tutti i moduli che implementano determinati protocolli?
Altre risposte a questa domanda: http://stackoverflow.com/q/12347044/11683 – GSerg