Ich muss Daten von tausend Datensätze in einer Datentabelle speichern und Postback beibehalten. Welche Option eignet sich für mich Viewstate (die ich verwendet habe) oder Sitzung. Wenn ich viewstate verwendet habe, wird ein verstecktes Feld erstellt, um es zu speichern und das Laden der Seite zu verlangsamen. Es gibt also einen Overhead (serverseitige Speicherbelegung und Verzögerung der Antworten) beim Speichern in der Sitzung. Bitte schlagen Sie mir die Lösung vorWelche ist besser für Leistung Viewstate oder Sitzung
Antwort
Für große Datenmengen ist Session viel effizienter. Wenn Sie feststellen können, wann der Benutzer mit einem bestimmten Datenblock fertig ist, setzen Sie die Variable Session auf null, um den Speicheraufwand zu verringern. Sie können dies nicht immer tun, aber die Sitzung wird schließlich ablaufen und der Speicher wird dann zurückgewonnen. Das Senken des Session-Timeout kann einigen helfen, aber nicht zu klein, Sie möchten Ihre Benutzer nicht abschneiden. Die Sitzung muss in Ihrer Datei Web.config aktiviert sein.
Hier ist die Richtlinien für Session vs. Viewstate:
Viewstate: Die binäre Datenstruktur des Anzeigestatus Base64 in die Seite gelegt werden codiert, was es bedeutet, ist 1,3333 mal (8/6) die Größe der ursprünglichen Binärdaten. Diese Daten werden für jede Seitenansicht hochgeladen und heruntergeladen. Wenn Sie also viel in ViewState haben, hat das Auswirkungen auf die Seitenreaktionszeiten. Die Base64-Kodierung ist wahrscheinlich stark optimiert, das ist kein Leistungseinbruch. Bei jeder Seitenanforderung wird der Speicherplatz für den ViewState reserviert und dann freigegeben, sodass es sich nicht um einen Langzeitspeicher handelt. Da sich die Daten auf der Seite befinden, läuft sie nicht ab.
Sitzung: Alle Daten in der Sitzung werden auf dem Webserver zwischen dem Laden der Seite beibehalten. Dies hält die Seite klein, sie muss nur die Sitzungskennung tragen. Auf der anderen Seite bleibt jeder Speicher, der zum Speichern von Daten in der Sitzung verwendet wird, bis zum Ablauf der Sitzung reserviert. Ich habe mich gefragt, ob die Session binäre Daten kopiert oder nur einen Zeiger behält. Wie bei der Base64-Kodierung kann dies stark optimiert werden. Wenn dies der Fall ist, ist dies kein Leistungseinbruch. Die Sitzung kann ablaufen, wenn der Benutzer zwischen den Seitenaufrufen zu lange wartet. Wenn die Sitzung abläuft, sollte der Benutzer in einen bekannten Zustand auf der Webseite zurückkehren.
Ein weiteres Problem hier, wenn Sie Informationen in der Sitzung speichern, kann die Sitzungs-ID für mehrere Registerkarten im Client-Browser freigegeben werden. Sie müssen darauf achten, wie Sie die in der Sitzung gespeicherten Daten verwenden. Stellen Sie sicher, dass Sie dies testen, damit Ihre Benutzer keine unerwarteten Ergebnisse erhalten.
(Hinweis: Die Verwendung Viewstate RESTful ist, ist Session nicht.)
Was passiert, wenn ich vollständig Session-Variablen statt Viewstate verwenden? –
Viewstate ist haltbarer, da es vom Browser des Benutzers verwaltet wird. Selbst wenn ein Benutzer eine Stunde lang auf einer Seite sitzt und dann irgendwo klickt, behält die Seite immer noch den Ansichtszustand bei, während die Sitzung wahrscheinlich abgelaufen ist. Der Trick besteht darin, die richtige Balance zu finden. – gmlobdell
Ja, Sie haben Recht, aber ich möchte etwas anderes, was wird der Speicherverbrauch und Zeit beim Laden der Seite in beiden Fällen sein –
Sie nicht Tausende von Datensätzen in der Sitzung oder Ansichtszustand gespeichert werden sollte. –
Was ist Best Practice dann –
Holen Sie nur Daten, die auf der Seite erforderlich ist. Wie wenn Sie Datentabelle zum Binden des Gitters verwenden. Dann sollte die Datentabelle nur die Daten enthalten, die auf der aktuellen Seite der Gridview benötigt werden. –