Quelle est la méthode préférée ?
Session.Remove("foo");
Session["foo"] = null;
Y a-t-il une différence ?
Quelle est la méthode préférée ?
Session.Remove("foo");
Session["foo"] = null;
Y a-t-il une différence ?
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.
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();
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.
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."_
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 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.