ASP.NET 'Session.Remove (key)' v / s 'Session (key) = rien'
J'ai vu que les développeurs utilisent deux approches lorsqu'ils sont effectués avec un objet de session.
1) Session.Remove(clé)
2) Session(clé) = rien
Quelle est la meilleure approche des deux ci-dessus? N'Session.Supprimer détruire l'objet stockées automatiquement?
La deuxième approche dépendent du garbage collector à fait libre de la mémoire?
EDIT:
Merci pour les réponses, les gars. Semble comme la Session.Supprimer est la bonne façon de procéder. Toutefois, si la Session.Supprimer ne garantit pas l'élimination de l'objet, alors quel est le meilleur moyen de s'en débarrasser de l'objet stocké dans la session lorsque nous n'avons pas besoin de davantage?
Grâce.
source d'informationauteur Srikanth Venugopalan
Vous devez vous connecter pour publier un commentaire.
Si vous définissez l'objet de
null
ou rien, la clé existe toujours dans la Session, même si la valeur estnull
.Ce comportement est le même que tout autre type de dictionnaire des classes dans le CLR.
Si vous voulez supprimer un objet complètement à partir de la Session, vous devez utiliser le
Session.Remove("key")
méthode.Il l'habitude de lever une exception si la clé n'est pas présente dans la Session.
Je préfère la Session.Remove(clé), parce qu'il supprime de la mémoire utilisée pour la clé dans la session dictionnaire ainsi; avec la seconde approche, la référence à la valeur est dissocié, cependant, la clé est toujours présent dans la Session dictionnaire.
Aucune des approches appel jeter sur l'objet, ce qui doit être fait manuellement.
Les deux approches dépendent du garbage collector pour libérer de la mémoire, Dans la première approche, la mémoire de la clé de l'objet peut devenir disponible pour la collection. Aussi n'oubliez pas que juste parce que vous avez supprimé une référence à l'objet de la session dictionnaire ne signifie pas qu'il n'est référencé nulle part ailleurs dans votre application.
La logique réelle qui est exécutée dans les deux cas, est déterminée par la mise en œuvre de ce type qui est la mise en œuvre de la ISessionStateItemCollection interface dans le Système.Web.SessionState espace de noms. Le type de béton mise en œuvre de cette interface est déterminé par la configuration de la session de fournisseur de magasin.
Les fournisseurs intégrés (In-Process, État du Serveur et SQL Server) utilisent tous les SessionStateItemCollection classe situé dans le Système.Web.SessionState espace de noms, c'est donc la mise en œuvre qui sera utilisé dans la grande majorité des cas, puisque la plupart des gens ne pas mettre en œuvre une séance personnalisée de fournisseur de magasin.
Comme d'autres l'ont souligné, si la valeur est vraiment être retiré de la séance parce qu'il n'a pas besoin d'être référencé plus, du moins pour le moment, alors vous devriez probablement appeler la méthode Remove juste pour le plaisir de nettoyage de la mémoire de stockage interne des mécanismes de l'objet Session. Aucune des méthodes explicitement disposer de l'objet qui a été précédemment stocké à l'aide de cette clé.
Session.Remove(clé) est généralement parlant, le plus sûr moyen d'aller si vous voulez vraiment supprimer l'objet à partir du cache. Gardez à l'esprit que si vous utilisez inproc gestion de session, alors l'objet n'est pas être sérialisé alors il ya une chance, il pourrait être référencé par autre chose que le gestionnaire de session, donc le garbage collector ne sera pas nécessairement le nettoyer.
Si vous utilisez de proc gestion de session, puis l'objet est sérialisé et comme un résultat, il n'y a pas de "mémoire" de la représentation de l'objet et, par conséquent, le garbage collector n'a pas vraiment besoin de "nettoyer"
Réglage de la Session(clé) = rien n'est pas réellement supprimer la clé de session, elle ne fait qu'en null. De nouveau, les mêmes règles autour de la collecte des ordures s'appliquent.