.net静态分配高频堆和单例中的数组

时间:2013-08-14 22:43:46

标签: c# .net memory-leaks static heap

我一直在做很多关于静态对象和高频率与低频率堆的研究。我知道高频堆不是垃圾收集的。我的问题是,如果我将普通类中的数组或字典实例化为Web服务器中的静态实例:

public class Lookup 
{
    private static readonly Lookup instance = new Lookup();
    private Dictionary<Decimal, Enum> _enums;
    public static Enum GetEnum(Decimal value)
    {
        return instance._enums[value];
    }
    Lookup()
    {
        _enums = new Dictionary<decimal, Enum>();
        _enums[1.1] = enum.enum1;
        _enums[2.2] = enum.enum2;
        _enums[3.3] = enum.enum3;
        _enums[4.4] = enum.enum4;
        //...etc
        _enums[5000] = enum.enum5000;
    }
}

静态实例位于High Frequence堆中。那里的字典也是吗?或者是否有指向低频堆的指针?
创建默认大小的字典/数组并一次添加一个值时,字典必须重复调整自身大小。据我了解,它通过分配新内存和复制数据来实现这一点,旧字典最终获得Garbage Collected。但是如果没有收集高频堆,这会导致数组的多个副本驻留在HF堆中吗?或者,如果HF堆只有指向LF堆的指针,那么它们是否会被收集,因为仍存在驻留在HF堆中的引用?

编辑:感谢Alexei Levenkov,这个目前正在网上运行,当调用此GetEnum时,我们发现异常的内存异常会导致我们的服务器无法访问。至于参考文献,这里有几个:

http://www.codeproject.com/Articles/15269/Static-Keyword-Demystified

High Frequency Heap

http://msdn.microsoft.com/en-us/magazine/cc163791.aspx

0 个答案:

没有答案