質問

私は、サーバー上のビューステートを保存するには、いくつかのアプローチを読んだことがある。

ここで

1 のです

別のには

しかし、彼らは一種の複雑です。私はそれをシリアル化することなく、オブジェクトを永続化する方法を探しています。私は、セッション状態を使用することができますが、ユーザが複数のウィンドウを開いた場合、オブジェクトの上書きがあるかもしれません。

これに対する簡単な解決策はありますか?

役に立ちましたか?

解決

このような状況で、私は、一意のキーを使用してセッションにオブジェクトを格納入れて、ページへの鍵を結ぶでしょう。このすべては、ページクラスのプロパティに抽象化することができます。

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

別のセッション鍵は、ページごとに異なるオブジェクトを可能にします。代わりに、代わりにSessionオブジェクトを使用して、あなたは自動的にメモリのうち古いエントリを削除するためにアプリケーションキャッシュ(Cacheオブジェクト)を使用して検討することもできますが、これは、独自の注意点があります。

メモリの使用状況についての彼の答えにジョエルの警告が完全に正確であることに留意すべきです。これは、低メモリ、高使用、または大持続性オブジェクトのシナリオのために最高のアイデアではないかもしれません。

他のヒント

  

私はそれをシリアル化することなく、オブジェクトを永続化する方法を探しています。

それには注意してください。これはあなたのサイトのメモリ使用に劇的な影響を与えることになる、とメモリの使用は、多くの場合、拡張性に最大の障害となっている。

ユーザーが開くことがあります各ウィンドウに番号を割り当てます。セッションキーにその番号を追加します。あなたはまた、適切なセッション変数を取得できるように、どこかのページ(クエリ文字列または非表示の入力)に番号を保存する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top