web-dev-qa-db-fra.com

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

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

Session.Remove("foo");

Session["foo"] = null;

Y a-t-il une différence?

55
David Basarab

Y a-t-il une différence?

Il y a. Session.Remove(key) supprime l'entrée (clé et valeur) du dictionnaire tandis que Session[key] = null attribue une valeur (qui se trouve être nulle) à une clé. Après le premier appel, la clé n'apparaîtra pas dans le Session#Keys collection. Mais après ce dernier, la clé peut toujours être trouvée dans la collection de clés.

120
Buu Nguyen

Je sais que c'est du vieux fil, mais restez avec Session["key"] = null - c'est beaucoup plus rapide! J'ai fait quelques tests (sur l'état de session InProc), supprimant 1000 éléments en ligne (le temps écoulé est pour 1000 éléments totalement, donc si vous voulez du temps moyen pour un élément, divisez-le simplement avec 1000):

Suppression de 1000 éléments existants:

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

Suppression de 1000 éléments NON existants:

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

Suppression de 500 éléments existants et 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();
26
JakubRi

J'irais avec Remove mais je ne peux pas honnêtement dire s'il y a une différence. À une supposition, il peut toujours y avoir une clé vide conservée pour cette valeur nulle mais pas sûr. Supprimer me donnerait peu de doute et si c'est ce que vous voulez faire lit mieux dans le code aussi.

10
dove

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

Voici quelques liens vers la documentation sur MSDN:

"Propriété HttpSessionState.Item:

Type de valeur de propriété: System.Object

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

9
splattne

La plus grande différence est la façon dont vous lisez la session.

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

ou

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

Si vous utilisez la première méthode, définir la valeur sur null ne fonctionnera pas et vous devez utiliser supprimer.

Si vous utilisez la deuxième méthode, vous pouvez définir la valeur sur null.

4
FlySwat