ASP.NET Server Side Viewstate
-
20-08-2019 - |
Frage
Ich habe einige Ansätze lesen Ansichtszustand auf dem Server zu speichern:
Hier eine andere ist
Aber sie sind irgendwie kompliziert. Ich bin auf der Suche nach einem Weg, um ein Objekt zu beharren, ohne es serialisieren zu müssen. Ich kann Sitzungsstatus verwenden, aber wenn ein Benutzer mehr als ein Fenster geöffnet wird, könnte es Überschreibungen des Objekts sein.
Gibt es eine einfache Lösung für dieses?
Lösung
In dieser Situation würde ich das Objekt in der Sitzung setzen speichere einen eindeutigen Schlüssel und den Schlüssel zur Seite binden. All dies kann in Eigenschaften auf der Seite Klasse abstrahiert werden.
public string PersistanceKey
{
get {
if(ViewState["PersistanceKey"] == null)
ViewState["PersistanceKey"] = "Object" + Guid.NewGuid().ToString();
return (string)ViewState["PersistanceKey"];
}
}
public PersistanceObject Persistance
{
get {
if(Session[this.PersistanceKey] == null)
Session[this.PersistanceKey] = new PersistanceObject();
return (PersistanceObject)Session[this.PersistanceKey];
}
Die verschiedenen Sitzungsschlüssel würden verschiedene Objekte auf einer Pro-Seite-Basis ermöglichen. Alternativ kann anstelle des Session-Objekt zu verwenden, können Sie die Anwendung Cache (die Cache-Objekt) in Betracht ziehen, um automatisch veraltete Einträge aus dem Speicher zu entfernen, aber seine eigenen Vorbehalte hat.
Es ist zu beachten, dass Joel Warnungen auf seine Antwort über die Speichernutzung ganz korrekt sind. Dies ist vielleicht nicht die beste Idee für Low-Memory, Hoch Nutzung oder groß persistance-Objekt-Szenarien.
Andere Tipps
Ich bin für einen Weg suchen, um ein Objekt zu beharren, ohne es serialisieren zu müssen.
Seien Sie vorsichtig damit. Dies wird einen dramatischen Einfluss auf die Speichernutzung Ihrer Website haben, und die Speichernutzung ist oft das größte Hindernis für die Skalierbarkeit.
Weisen Sie eine Nummer, die jedes Fenster des Benutzer öffnen könnte. Fügen Sie diese Nummer an die Sitzungsschlüssel. Sie sollten auch die Nummer speichern irgendwo in Seite (Abfragezeichenfolgeflag oder einen versteckten Eingang) in der Lage sein, die entsprechenden Session-Variablen abgerufen werden.