替换大型ReadOnlyDictionary - 垃圾收集

时间:2016-09-13 15:36:09

标签: c# caching memory-management memory-leaks garbage-collection

我们有一个很大的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中的数据是否被正确地垃圾收集,因为我们似乎正在放弃它以用于新实例。我们是否应该采取不同的措施来确保先前的缓存被正确销毁,并且操作系统会回收数据?

0 个答案:

没有答案