我们有一个很大的ReadOnlyDictionary
,可以作为我们需要快速访问的大量数据对象的高速缓存。
在计时器上,我们定期加载替换缓存,然后在完全加载时,我们用新创建的缓存对象替换现有的缓存对象,以便操作继续而不会中断。
最近,我们遇到了一些内存泄漏问题,我们正在研究的一件事就是更换缓存。
简要介绍我们正在做的事情:
public class Optimizations
{
private volatile ReadOnlyDictionary<string, Dictionary<string, object>> _cache;
public object GetFromLocalCache(string dataSet, string key)
{
object obj;
Dictionary<string, object> dict;
if (_cache.TryGetValue(dataSet, out dict) && dict.TryGetValue(key, out obj))
{
return obj;
}
return null;
}
private void OnTimerEvent()
{
ReadOnlyDictionary<string, Dictionary<string, object>> newCache = ...
_cache = newCache;
}
}
我想知道以前在_cache
中的数据是否被正确地垃圾收集,因为我们似乎正在放弃它以用于新实例。我们是否应该采取不同的措施来确保先前的缓存被正确销毁,并且操作系统会回收数据?