2011-07-28 16 views
0

非常に頻繁にアクセスされる、アプリケーション状態で次のインスタンスを保存したいとします。アプリケーション状態でのクラスの保存(ASP.NET)

public class Example { 
    public string A; 
    public string B; 
    public bool C; 
    public int D; 
    // ... 
} 

私はApplication["Example"]として一緒にクラス全体を保存するかどうかを決定することができない、またはApplication["ExampleA"]として個別にそのプロパティを格納するなど

私の思考は((Example)Application["Example"]).Aがメモリにクラス全体をコピーする必要がありますということです1つのプロパティにアクセスするだけです - そうですか?または私は間違っていますか?

答えて

1

私は静的なグローバル変数を使用し、パフォーマンスが少し良くなり、型を安全にしてコードを読みやすくします。詳細情報については

ASP.NET Application state vs a Static object

+0

アプリケーションの状態が/シリアライズ、デシリアライズする必要はありません...見、それは単にメモリ辞書にあります。コレクション内のアイテムを検索する必要がないので、静的にアクセスする方が素早くアクセスできます。アプリケーションを使用すると、無料で解決できる潜在的なスレッドの問題はありますか?静的でコード化する必要がありますか? – DoctorMick

+0

ええ、あなたの権利はシリアル化/逆シリアル化は必要ありません。私が思っているパフォーマンス上の利点は、辞書読み込みが必要ないかキャストされていないためにわずかです。糸引きする限り、彼らは同じだと思う。 – edge2

0

あなたはちょうどそのプロパティの1つの値が必要な場合は、オブジェクト全体をコピーする必要はありません

右ですが......。 概念的には、値オブジェクト(アイデンティティや特定のオブジェクトは必要ありません)について言えば、プロパティだけを格納できます。 特定のオブジェクト(ユーザーのパスワードをイメージングする)のプロパティの値が何であるかを知る必要がある場合は、オブジェクト全体を格納する必要があります。

0

アプリケーションの状態はメモリに格納されているため、クラスを取得するとかなりのオーバーヘッドは見えません。間違っているかもしれませんが、クラスがそれぞれのリクエストでシリアル化/デシリアライズされないことは間違いありませんが、私はかなり確信しています。