Dans ASP.NET, si des éléments sont laissés dans l'état de session Implémenter IDisposable mais ne sont jamais spécifiquement supprimés et éliminés par l'application à l'expiration de la session, Dispose sera appelé sur les objets de Dipose () va s'exécuter?Session contenant des éléments implémentant IDisposable
Répondre
Si le motif IDisposable
est implemented properly, alors oui (c'est-à-dire que le destructeur de la classe prendra soin de disposer l'objet). Je ne crois pas que le gestionnaire de session ASP.NET donne des garanties sur l'appel explicite Dispose()
sur les classes implémentant IDisposable
. Notez que malgré les objections agressives de Mark, je ne suggère pas d'ajouter "de façon routinière" les finaliseurs. Je suggère simplement que si vous voulez la méthode Dispose
sur votre objet appelé lorsque la session expire, ceci est une option viable.
Un finaliseur n'est * pas * une implémentation IDisposable correcte; plutôt, quelque chose avec un finaliseur peut souvent aussi être IDisposable. Mais un objet IDisposable ne devrait pas avoir de finaliseur juste parce qu'il est IDisposable. –
Je ne pensais pas que c'était "agressif" - simplement qu'un finaliseur n'a rien à voir avec le fait qu'IDisposable soit "implémenté correctement" –
Je dirais laisser un commentaire négatif sur ma réponse, déformer ma réponse, et créer votre propre réponse qui réitère votre désaccord qualifie comme une «objection agressive». N'importe lequel d'entre eux aurait été suffisant en eux-mêmes. Je suppose que nous devrons simplement être en désaccord sur celui-ci aussi. –
Je ne suis pas d'accord avec la réponse de Sean; premièrement, les finaliseurs et non doivent être régulièrement ajoutés aux classes, même s'ils sont IDisposable
- les finaliseurs ne devraient être réellement utilisés que dans les classes représentant des ressources non gérées. Inversement, une classe avec un finaliseur est souvent IDisposable
.
Re la question: est Dispose()
appelé - non, il ne l'est pas. L'objet sera ramassé à un moment donné dans le futur (indéterminé), mais c'est à peu près tout. Un finaliseur n'ajouterait pas grand-chose ici, car tous les objets encapsulés seront également déjà éligibles à la collecte (en supposant qu'ils ne sont pas référencés ailleurs).
Je serais concerné d'avoir des objets jetables dans la session. Il va presque certainement créer un problème d'évolutivité pour vous. Tout ce qui est jetable est probablement connecté à une ressource limitée, si vous avez beaucoup de sessions actives, vous êtes susceptible d'utiliser cette ressource. Deuxièmement je m'attendrais à ce que beaucoup (la plupart?) D'objets jetables ne fonctionnent pas bien dans une ferme de Web car la ressource à laquelle ils sont liés est probablement locale à une seule machine et ils ne sérialiseront pas et désérialiseront alors sur une autre machine dans la même machine Etat.
- 1. IDisposable
- 2. IDisposable Winform
- 3. Chaîne IDisposable
- 4. StructureMap InstanceScope.Hybrid et IDisposable
- 5. Winforms Disposing IDisposable
- 6. ASP.NET MVC et Idisposable
- 7. EntLib IDisposable conversion
- 8. XmlReader et IDisposable
- 9. Zone contenant des points?
- 10. IUsable: le contrôle des ressources d'une meilleure façon que IDisposable
- 11. Redimensionner tous les éléments contenant avec javascript en utilisant
- 12. DI: Gestion de la vie des objets IDisposable
- 13. Utilisation de LINQ avec des classes implémentant ICollection non générique
- 14. Méthode rapide pour convertir des classes implémentant la même interface
- 15. Les objets IDisposable dans HttpContext.Current.Session sont-ils disposés sur Application_End?
- 16. Comment puis-je afficher des éléments de tableau de session dans PHP
- 17. Cette implémentation IDisposable est-elle correcte?
- 18. Comparer deux tableaux contenant des chaînes?
- 19. Exécuter des commandes contenant l'espace dans bash
- 20. Alignement vertical des éléments d'entrée
- 21. Comment puis-je disposer un objet IDisposable si l'instruction using renvoie une exception?
- 22. DataGridViewComboBoxColumn - modification des éléments
- 23. NSArray ajouter des éléments
- 24. Charger le fichier XML contenant 300 éléments pour chaque enregistrement dans db
- 25. Tri des chaînes contenant des nombres d'une manière conviviale
- 26. construire des listes d'arguments contenant des espaces blancs
- 27. Objets mocking contenant des sous-objets avec des jacquements Rhino
- 28. Faire correspondre des lignes contenant un mot avec des permutations
- 29. JVM Thread dumps contenant des moniteurs sans verrouillage des threads
- 30. objet InternetExplorer.Application et biscuit contenant
Plus de réponses à cette question: http://stackoverflow.com/q/12347044/11683 – GSerg