Sitzungsvariablen im Vergleich zu lokalen Variablen

8

Immer, wenn ich etwas in der Sitzung speichern muss, habe ich die Angewohnheit übernommen, die Häufigkeit zu minimieren, mit der ich auf die Sitzung zugreifen muss, indem ich Folgendes tue:

%Vor%

Ich gehe davon aus, dass das Objekt, wenn es mehrmals während eines Postbacks verwendet wird, seltener aus der Session abgerufen werden muss. Ich habe aber absolut keine Ahnung, ob das überhaupt in Bezug auf die Leistung hilft oder tatsächlich nur eine Verschwendung von Zeit oder vielleicht sogar eine schlechte Idee ist. Weiß jemand, wie rechenintensiv es ist, ein Objekt ständig aus der Sitzung herauszuziehen, wenn man es mit dem obigen Ansatz vergleicht? Oder wenn es dafür Best Practices gibt?

    
Matt King 13.05.2011, 09:01
quelle

4 Antworten

3

Hängt davon ab, welche Art von Sitzungsspeicher Sie verwenden (für weitere Informationen siehe: hier ).

Wenn Sie InProc-Speicher verwenden, ist der Leistungsunterschied wahrscheinlich minimal, es sei denn, Sie greifen sehr häufig auf das Objekt zu. Die lokale Kopie tut jedoch nicht wirklich weh.

    
SirViver 13.05.2011, 09:23
quelle
1

Es hängt sicherlich von Ihrer Speichereinheit ab, aber es ist in beiden Fällen ein guter Ansatz, da Sie DeSerialization verhindert, wenn der Speicher nicht InProc ist ... und selbst im Falle von InProc verhindert es das Boxen \ UnBoxing ... so meine Abstimmung ist für Ihren Ansatz.

    
Usman Masood 13.05.2011 09:43
quelle
1

Ich sehe nichts falsch mit Ihrem Ansatz. Der einzige Nachteil ist, dass, wenn ein anderer Teil Ihres (oder eines anderen) Codes den Sitzungswert ändert, nachdem Ihr privates Feld initialisiert wurde, Ihre Wrapper-Eigenschaft immer noch den alten Wert zurückgibt. Mit anderen Worten, es gibt keine Garantie, dass Ihre Eigenschaft den Sitzungswert außer zum ersten Mal tatsächlich zurückgibt.

Im Hinblick auf die Leistung denke ich, dass es bei InProc wenig oder keinen Gewinn gibt. Wahrscheinlich ähnlich wie bei jedem anderen Wörterbuch vs Variablenspeicher. Es kann jedoch einen Unterschied machen, wenn Sie andere Sitzungsspeichermodi verwenden. Und wenn Sie wirklich wissen wollen, können Sie Ihre App profilieren und herausfinden;) Sie können sogar etwas so einfaches versuchen wie 2 Trace-Schreibvorgänge und einige geloopte Sitzungen zwischen ihnen lesen / schreiben.

Und hier ist ein Read On Session Storage Internals: Ссылка

    
rciq 13.05.2011 10:06
quelle
-2

Es hängt von der Größe der zu speichernden Daten, der Bandbreite (Internet oder LAN), dem Umfang der Anwendung ab. Wenn die Datengröße klein ist, die Bandbreite gut genug ist (LAN), die Skalierung weltweit ist (wie Whitehouse.gov), sollten wir sie auf der Client-Seite speichern (als versteckter Parameter). In anderen Situationen (Datengröße ist sehr groß, Bandbreite ist sehr gering, Skalierung ist klein (nur eine Gruppe von 3-4 Personen wird die Anwendung verwenden), dann können wir sie auf der Serverseite (Sitzung) speichern Faktoren, um sie in dieser Entscheidungswahl zu berücksichtigen. Ich würde auch nicht empfehlen, nur ein Feld im Session-Objekt zu verwenden. Erstellen Sie etwas wie Dictionary (HashMap in Java) in der Sitzung, und verwenden Sie es als Speicher, und Benutzer sollte den Schlüssel dieses Dictionary übergeben, um diese Daten zu erhalten. Es ist erforderlich, um Benutzern die Möglichkeit zu geben, Ihre Website auf mehreren Registerkarten zu öffnen.

Beispiel einer URL, die auf die benötigte Suche zugreift:

%Vor%     
meir 13.05.2011 09:23
quelle

Tags und Links