假设我有以下对象
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-ed,我很好。我试图在时间(我想以某种方式缓存 的结果createDictionary
)和内存开销(我不想让内存占用的时间超过必要的时间)之间找到平衡。