次のオブジェクトがあるとします
public class MyClass
{
public ReadOnlyDictionary<T, V> Dict
{
get
{
return createDictionary();
}
}
}
ReadOnlyDictionary
が の読み取り専用ラッパーであるとしますDictionary<T, V>
。
このcreateDictionary
メソッドは完了するまでにかなりの時間がかかり、返されるディクショナリは比較的大きくなります。
明らかに、ある種のキャッシュを実装して結果を再利用できるようにしたいのcreateDictionary
ですが、ガベージコレクターを乱用したり、多くのメモリを使用したりしたくありません。
辞書に使用することを考えWeakReference
ましたが、これが最善のアプローチかどうかはわかりません。
あなたは何をお勧めします?複数回呼び出される可能性のあるコストのかかるメソッドの結果を適切に処理するにはどうすればよいですか?
アップデート:
C# 2.0 ライブラリ (単一の DLL、非ビジュアル) に関するアドバイスに興味があります。ライブラリは、Web アプリケーションのデスクトップで使用される場合があります。
更新 2:
この質問は、読み取り専用オブジェクトにも関連しています。プロパティの値を から に変更しDictionary
ましたReadOnlyDictionary
。
更新 3:
はT
比較的単純な型です (文字列など)。V
カスタムクラスです。のインスタンスを作成するにはコストがかかると考えるかもしれませんV
。ディクショナリには、0 から数千の要素が含まれる場合があります。
単一のスレッドから、または外部同期メカニズムを使用して複数のスレッドからアクセスされると想定されるコード。
誰も使用していないときに辞書が GC されていれば問題ありません。createDictionary
時間 (何らかの方法で の結果をキャッシュしたい) とメモリ消費 (必要以上に長くメモリを占有したくない)のバランスを見つけようとしています。