In einem meiner letzten ASP.NET-Projekte wurden die ViewStates ziemlich exzessiv eingesetzt. ViewStates sind eine tolle Sache, aber wenn viele Daten im ViewState gespeichert werden leidet irgendwann die Performance, da diese in einem hidden-Field ständig mitgeladen werden. Ein Lösungsansatz wäre, den ViewState nicht mehr im Client zu speichern, sondern physikalisch auf dem Server abzulegen. Dabei werden nicht selten 40-60 Kb an Datenvolumen pro Seite eingespart.
Um dies zu erreichen müssen folgende Methoden überschrieben werden: LoadPageStateFromPersistenceMedium() in dieser Methode werden alle gespeicherten Informationen über den Anzeigestatus in das Page-Objekt geladen.
Als erstes wird ein StreamReader() Objekt erstellt. Die Methode GenerateFileName() wird weiter unten vorgestellt. Der Inhalt der jetzt gelesen wird, wird in die Variable strContent gepackt. Dann wird über die Klasse LosFormatter() versucht, den ViewState der aus der Textdatei geliefert wurde zu deserialisieren. Bis auf den LosFormatter() hier nichts außergewöhnliches. Der LosFormatter() macht nichts anderes als den Anzeigestatus einer Page zu serialisieren oder zu deserialisieren. Daher muss auch nicht näher auf diese Klasse eingegangen werden da die Funktionalität recht einfach ist. SavePageStateToPersistenceMedium(object viewState) Hier erfolgt das speichern des Anzeigestatus einer Page.
Mittels StreamWriter() und dem LosFormatter() wird nun der ViewState in eine Text-Datei geschrieben. Alles schön und gut, nur wie ist es jetzt möglich den ViewState explizit einer Seite und einem User zuzuordnen? Relativ einfach. Der Name der Datei ist entscheidend und dieser wird durch eine entsprechende Funktion generiert.
Der Dateiname setzt sich aus folgenden Teilen zusammen: Die URL, damit auch wirklich pro Seite ein eigener ViewState gespeichert werden kann. All das sollte reichen damit der ViewState nicht mehr im Client mitgeführt wird. Die Vorteile liegen auf der Hand. Es werden weniger Daten übertragen und der ViewState kann auch von dritten nicht mehr entschlüsselt werden. Das ganze noch einmal in VB.NET:
|
ViewStates auf dem Server speichern
In einem meiner letzten ASP.NET-Projekte wurden die ViewStates ziemlich exzessiv eingesetzt. ViewStates sind eine tolle Sache, aber wenn viele Daten im ViewState gespeichert werden leidet irgendwann die Performance, da diese in einem hidden-Field ständig mitgeladen werden. Ein Lösungsansatz wäre, den ViewState nicht mehr im Client zu speichern, sondern physikalisch auf dem Server abzulegen. Dabei werden nicht selten 40-60 Kb an Datenvolumen pro Seite eingespart. Weiterlesen …