Question

J'ai lu des méthodes pour stocker viewstate sur le serveur:

En voici un

ici est un autre

Mais ils sont en quelque sorte compliqués. Je cherche un moyen de persister un objet sans avoir à le sérialiser. Je pourrais utiliser l'état de session, mais si un utilisateur ouvre plusieurs fenêtres, l'objet pourrait être écrasé.

Existe-t-il une solution simple à ce problème?

Était-ce utile?

La solution

Dans cette situation, je mettrais l'objet dans la session en utilisant une clé unique et lierais la clé à la page. Tout cela peut être résumé dans les propriétés de la classe de page.

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];
}

Les différentes clés de session autoriseraient différents objets page par page. Alternativement, au lieu d'utiliser l'objet Session, vous pouvez envisager d'utiliser le cache de l'application (l'objet Cache) pour supprimer automatiquement les entrées obsolètes de la mémoire, mais cela comporte ses propres réserves.

Il convient de noter que les avertissements de Joel sur sa réponse concernant l'utilisation de la mémoire sont tout à fait exacts. Ce n'est peut-être pas la meilleure idée pour les scénarios avec objets à faible mémoire, à forte utilisation ou à grande persistance.

Autres conseils

  

Je cherche un moyen de conserver un objet sans le sérialiser.

Faites attention à cela. Cela aura un impact considérable sur l'utilisation de la mémoire sur votre site. L'utilisation de la mémoire est souvent le principal obstacle à l'évolutivité.

Attribuez un numéro à chaque fenêtre que l'utilisateur peut ouvrir. Ajoutez ce numéro à la clé de session. Vous devez également stocker le numéro quelque part dans la page (chaîne de requête ou entrée masquée) pour pouvoir récupérer la variable de session appropriée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top