ASP.NET supprimant 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?

    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 atsortingbue une valeur (qui est nulle) à une clé. Après le premier appel, la clé n’apparaîtra pas dans la collection Session#Keys . 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 thread mais que je rest définitivement avec Session["key"] = null – c’est beaucoup plus rapide! J’ai effectué quelques tests (sur l’état de session InProc), en supprimant 1000 éléments en ligne (le temps écoulé correspond à 1000 éléments, donc si vous voulez un temps moyen pour un élément, divisez-le par 1000):

    Suppression de 1000 éléments existants:

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

    Suppression de 1000 éléments existants:

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

    Suppression de 500 articles existants et de 500 articles 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(); 

    Je voudrais aller avec Remove, mais ne peut pas honnêtement dire s’il y a une différence. À supposer qu’il y ait toujours une clé vide pour cette valeur nulle mais pas sûre. Remove me donne peu de doute et si c’est ce que vous voulez faire, il se lit mieux dans le code.

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

    Voici quelques liens vers la documentation sur MSDN:

    • Classe HttpSessionState
    • Propriété HttpSessionState.Item (Ssortingng)

    “Propriété HttpSessionState.Item:

    Propriété Valeur Type: 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. “

    La plus grande différence réside dans la lecture de 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 remove.

    Si vous utilisez la seconde méthode, vous pouvez définir la valeur sur null.