55 votes

ASP.NET supprime un élément de la session ?

Quelle est la méthode préférée ?

Session.Remove("foo");

Session["foo"] = null;

Y a-t-il une différence ?

121voto

Buu Nguyen Points 19391

Y a-t-il une différence ?

C'est le cas. Session.Remove(key) supprime l'entrée (à la fois la clé et la valeur) du dictionnaire alors que Session[key] = null attribue une valeur (qui peut être nulle) à une clé. Après le premier appel, la clé n'apparaîtra pas dans le fichier Session#Keys collection. Mais après cette dernière, la clé peut toujours être trouvée dans la collection de clés.

26voto

JakubRi Points 181

Je sais que c'est un vieux sujet, mais il faut absolument s'en tenir à Session["key"] = null - c'est beaucoup plus rapide ! J'ai fait quelques tests (sur InProc Session State), en supprimant 1000 éléments dans la rangée (le temps écoulé est pour 1000 éléments au total, donc si vous voulez le temps moyen pour un élément, il suffit de le diviser par 1000) :

Suppression de 1000 articles existants :

Session[key] = null; - 0.82380000000000009 ms
Session.Remove(key); - 59.960100000000004 ms

Suppression de 1000 articles NON existants :

Session[key] = null; - 1.5368000000000002 ms
Session.Remove(key); - 0.6621 ms

Suppression de 500 éléments existants et de 500 éléments non existants :

Session[key] = null; - 1.0432000000000001 ms
Session.Remove(key); - 33.9502 ms

Voici un morceau de code pour le premier test :

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw1 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = null;
sw1.Stop();

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw2 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session.Remove(i.ToString());
sw2.Stop();

10voto

dove Points 12456

J'irais avec Remove mais je ne peux pas honnêtement dire s'il y a une différence. Je suppose qu'il y a peut-être encore une clé vide conservée pour cette valeur nulle, mais je n'en suis pas sûr. Supprimer me donnerait peu de doutes et si c'est ce que vous voulez faire lit mieux dans le code également.

9voto

splattne Points 48126

Cela a le même effet. Je pense personnellement que le Session.Remove exprime mieux l'intention du programmeur.

Voici quelques liens vers la documentation sur MSDN :

_"Propriété HttpSessionState.Item" :

Valeur de la propriété Type : System.Object

La valeur de l'état de session avec le nom spécifié, ou la référence nulle (Nothing en Visual Basic) si l'élément n'existe pas."_

4voto

FlySwat Points 61945

La plus grande différence réside dans la façon dont vous lisez la session.

if(Session.ContainsKey["foo"]) { return Session["foo"]; }

o

if(Session["foo"] != null) { return Session["foo"]; }

Si vous utilisez la première méthode, l'attribution de la valeur null ne fonctionnera pas, et vous devrez utiliser remove.

Si vous utilisez la deuxième méthode, vous pouvez donner à la valeur la valeur null.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X