2010-10-14 5 views
40

Czy istnieje różnica między Session.Clear() i Session.RemoveAll()?Session.Clear() vs. Session.RemoveAll()

Opisy i strony dokumentacji wydają się mówić dokładnie to samo, ale Zakładam, że musi istnieć jakiś powód do stworzenia dwóch funkcji, czy mam rację?

Odpowiedz

-1

Być oszczędzania można po prostu zawsze je nazwać wszystko jak tak ....

Session.Clear() 
Session.Abandon() 
Session.RemoveAll() 

VB.NET przykład, jestem pewien, że wszystko, co trzeba zrobić, to umieść; na końcu każdego z nich. Zrobiłem to dla mnie, ponieważ miałem problemy z moją sesją, zanim nie zostały usunięte.

+19

Uwaga: Wyczyść i Usuń wszystko tylko usuń wszystkie wpisy (użytkownik zachowuje ten sam identyfikator SessionId); Abandon kończy całą sesję (użytkownik otrzymuje nowy SessionId). –

+15

Odpowiedź Darina Dymitrowa powinna być zaznaczona jako odpowiedź, ponieważ naprawdę dotyczy tego, o co prosiła. To w rzeczywistości nie odpowiada na pytanie, które pyta o różnicę między tymi dwoma metodami, i faktycznie daje słabą odpowiedź, ponieważ sugeruje wywołanie Clear i RemoveAll, gdy są one funkcjonalnie identyczne, a zatem zbędne. – mtazva

+2

Również .Abandon() działa tylko na końcu żądania, więc wywołanie Session.Abandon(), a następnie Session.Add ("foo", bar) spowodowałoby przerwanie sesji. Nie wywołuj każdej metody za każdym razem, ponieważ działa ona przez większość czasu. – DaveD

115

Absolutnie to samo. RemoveAll dzwoni wewnętrznie Clear. Od Reflektor:

public sealed class HttpSessionState : ICollection, IEnumerable 
{ 
    ... 

    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] 
    public void RemoveAll() 
    { 
     this.Clear(); 
    } 

    ... 
} 
+1

ładne wyjaśnienie ............ –

+3

Świetna odpowiedź; bardzo definitywny. Zastanawiam się, dlaczego MS zawiera obie metody, gdy ktoś po prostu dzwoni do drugiego? W każdym razie to odpowiadało na moje pytanie, a ja po prostu użyję Clear() teraz, ponieważ łatwiej jest pisać i bardziej prosto. – Jim