Joe*_*Joe 4 c# garbage-collection
所以,我有这个非常有用的棒程序:
static void Main(string[] args)
{
new Dictionary<int,int>(10000000);
while (true)
{
System.Threading.Thread.Sleep(1000);
}
}
Run Code Online (Sandbox Code Playgroud)
这甚至不会产生编译器的任何警告,这是令人惊讶的.
运行它会分配一块内存.如果我运行多个副本,我最终会达到一个无法启动的程度,因为我已经没有内存了.
那么这里发生了什么?
垃圾收集器是非确定性的,并且响应内存压力.如果没有什么需要内存,它可能不会收集一段时间.它无法优化new
,因为这会改变你的代码:构造函数可能有副作用.此外,在调试中,它甚至更有可能决定不收集.
在发布/优化版本中,我希望在有充分理由的时候收集它.还有GC.Collect
,但除了极端情况或某些剖析要求外,通常应该避免这种情况.
作为"为什么" - GC"代"之间的GC行为存在差异; 你在"大对象堆"(LOH)上有一些大数组.这个LOH是非常昂贵的继续检查,这可以进一步解释为什么它是如此不情愿.
归档时间: |
|
查看次数: |
246 次 |
最近记录: |