Ich muss Daten von Tausenden Datensätzen in einer Datenbank speichern und diese beim Postback beibehalten. Welche Option ist für mich geeignet: Viewstate (das ich bisher verwendet habe) oder Session? Wenn ich Viewstate verwende, wird ein Hidden Field zur Speicherung erstellt und die Seitenladung verlangsamt. Gibt es also irgendwelche Nachteile (Speicherverbrauch auf der Serverseite und Verzögerungen bei den Antworten), wenn ich es in der Session speichere? Bitte schlagen Sie mir eine Lösung vor.
Antwort
Zu viele Anzeigen?Für große Datenmengen ist Session weitaus effizienter. Wenn Sie feststellen können, wann der Benutzer mit einem bestimmten Datenblock fertig ist, setzen Sie die Session-Variable auf null, um den Speicheroverhead zu reduzieren. Dies kann jedoch nicht immer gemacht werden, aber die Session läuft letztendlich ab und der Speicher wird dann freigegeben. Wenn Sie die Session-Timeout verringern, kann dies einige helfen, aber setzen Sie ihn nicht zu klein, um Ihre Benutzer nicht abzuschneiden. Die Session muss in Ihrer Web.config-Datei aktiviert sein.
Hier sind die grundlegenden Richtlinien für Session vs. ViewState:
ViewState: Die binäre Datenstruktur des ViewState wird zur Base64-Codierung, um in die Seite eingefügt zu werden, was bedeutet, dass sie 1,3333-mal (8/6) so groß ist wie die ursprüngliche binäre Daten. Diese Daten werden für jede Seitenansicht hochgeladen und heruntergeladen. Wenn also viel im ViewState vorhanden ist, wirkt sich dies auf die Seitenantwortzeiten aus. Base64-Codierung ist wahrscheinlich stark optimiert, sodass keine Leistungseinbußen zu erwarten sind. Jede Seitenanforderung wird Speicherplatz für das ViewState zuweisen und freigeben, sodass dies keine langfristigen Speicherprobleme verursacht. Da die Daten auf der Seite enthalten sind, läuft sie nicht ab.
Session: Alle Daten in der Session werden auf dem Webserver zwischen den Seitenaufrufen erhalten. Dadurch bleibt die Seite klein, da sie nur den Session-Identifier tragen muss. Auf der anderen Seite bleibt jeder Speicher, der zur Speicherung von Daten in der Session verwendet wird, bis zum Ablauf der Session zugewiesen. Ich frage mich, ob die Session eine Kopie binärer Daten erstellt oder nur einen Zeiger behält. Wie bei der Base64-Codierung kann dies stark optimiert werden, sodass es keine Leistungseinbußen gibt. Die Session kann ablaufen, wenn der Benutzer zu lange zwischen den Seitenaufrufen wartet. Wenn die Session abläuft, sollte der Benutzer auf einen bekannten Zustand auf der Webseite zurückgeführt werden.
Noch ein weiteres Problem hier, wenn Sie Informationen in der Session speichern, kann die Session-ID unter mehreren Registerkarten im Client-Browser geteilt werden. Seien Sie vorsichtig, wie Sie die in der Session gespeicherten Daten verwenden. Stellen Sie sicher, dass Sie dies testen, damit Ihre Benutzer keine unerwarteten Ergebnisse erhalten.
(Hinweis: Die Verwendung von ViewState ist RESTful, Session nicht.)