2011-11-11 8 views
3

私は、アプリケーションのすべてのインスタンスで共有される読み取り専用リストを持っており、頻繁に変更されることはありません。このリストにアクセスするには、静的クラスのプロパティを作成することをお勧めしますか?リストは静的コンストラクターのデータベースから入力されます。毎晩リサイクルするようにアプリケーションプールを設定すると、リストが毎日最新のものになることが保証されますか?これが悪い考えである理由はありますか?ありがとう!これは静的クラスに適していますか?

+2

は私によく聞こえます。しかし、struct /(sealed)クラスではできなかったことはありません。任意のタイプには静的メンバーが含まれている可能性があります – sehe

+1

ああ、子どものことを考えてみましょう:あなたのリストを変更不可能なコレクションとして公開してください – sehe

答えて

2

静的クラスに問題はありません。同様に動作するキャッシュを使用することもできます。キャッシュは、あなたが選択した時間に基づいてキャッシュを無効にできるという追加の特典を与えます。

2

これは良い解決策のようです。サブクラスが混乱しないように、密封されたクラスを代わりに使用することをお勧めします。

グローバル状態の問題は、アプリケーションによって変更されている場合です。この場合、それは問題ではありません。

+1

静的クラスのシールについてどう思いますか? – sehe

+0

@sehe - それを見つけていただきありがとうございます。 – Oded

+0

静的クラスには封印を追加できません。暗黙のうちに封印されている点はありません。 – blowdart

0

静的プロパティの保存方法を理解する必要があります。

すべての静的状態は、RuntimeType(静的ctorが呼び出されたときに作成される)のインスタンスに配置されます。 CLR via C#では、このメカニズムを詳細に説明しています。

このコレクションはすべてのインスタンスで共有されますが、すべての潜在的なメモリリークを覚えておく必要があります(コレクションイベントに登録していて、彼らは閉じているなど)

このアプローチの第2の欠点は、このコレクションが最新ではないということです。 第3の欠点は、このコレクションのスレッドの安全性に注意を払う必要があることです。これにより、パフォーマンスが低下します。

関連する問題