我一直在做很多关于静态对象和高频率与低频率堆的研究。我知道高频堆不是垃圾收集的。我的问题是,如果我将普通类中的数组或字典实例化为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