Pio*_*rak 8 .net garbage-collection
在白天,我在Windows服务中看到了很多第2代集合.
GC何时决定进行完全收集而不是仅收集Gen1和Gen0或仅收集Gen0?
有关更多信息,请阅读http://msdn.microsoft.com/en-us/library/0xy59wtx.aspx和链接的文章.通常,gen2是在"必要时"收集的.
可能导致过多Gen2集合的一件事是大对象堆(LOH).当LOH被填满时,它将触发完整的收集.如果您的应用程序分配并释放大量大型对象(80K或更大),那很可能是您的问题.
还要考虑在服务中使用服务器垃圾收集器.它通常会提供更好的性能(更少的集合).将其添加到app.config文件中:
<configuration
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
小智 5
通常,当满足以下1个时,触发(在任何一代下)收集
可能还有另一种我不知道的情况,但通常就是这样.第一个是通常开始收集的东西,而且相对来说,收集G2比G0更贵,你看到的更少.
要解决注释中的问题:
每一代都有一个阈值,当命中时将触发一个集合.Gen0可以是5mb,并且在填充时将被触发.GC运行后,如果你还有 5mb,我相信它会增加限制.如果不是每个分配都会触发一个集合,那么你就有问题了.Gen2 可能是20mb(注意我在这里编号)并且在那里应用相同的逻辑.
对于教科书示例,让我们看一个简单的场景.
一个完整的GC是昂贵的,我已经看到几天没有发生.当然,这是在一个具有> 64GB ram的系统上,并且没有必要.
归档时间: |
|
查看次数: |
4042 次 |
最近记录: |