Frage

Ich habe einige Ansätze lesen Ansichtszustand auf dem Server zu speichern:

Hier ist ein

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top