垃圾收集器有没有配置?

时间:2010-05-20 12:07:09

标签: .net garbage-collection

据我了解,垃圾收集器在应用程序运行时自行调整,例如,当收集管理堆上的对象时(根据MSDN),随着时间的推移调整了阈值。

如果应用程序崩溃,运行时是否记得以前的垃圾收集“设置”或任何其他设置?

3 个答案:

答案 0 :(得分:8)

是的,垃圾收集器算法中有一个启发式方法,可以自动调整分配策略。最明显的副作用是看到gen 0堆大小随着程序运行和消耗内存而增长。通常从2 MB开始,如果程序快速消耗内存,它可以达到~8 MB。 Perfmon.exe中可见的性能计数器对此有好处。

重点在于“自动”,这段代码是用平坦的假设编写的,即程序员没有足够的信息可以正确地引导算法。唯一的“钩子”是GC无法知道的东西,比如非托管内存使用情况(GC.AddMemoryPressure)或程序角色(app.exe.config)。

没有记录启发式的详细信息。但是,您可以从今天的出版社收集一些背景信息,用于软件算法文档,美国专利局。微软的大部分GC算法专利都归功于Patrick Dussud,你可以通过谷歌查询他的名字轻松找到它们。这是a relevant one

答案 1 :(得分:5)

不,运行时不记得它在运行期间学到的以前的垃圾收集“设置”。

您可以通过将以下内容放在配置文件中来配置并发垃圾回收:

<configuration>
   <runtime>
      <gcServer enabled="true"/>
   </runtime>
</configuration> 

或者:

<configuration>
   <runtime>
      <gcConcurrent enabled="false"/>
   </runtime>
</configuration>

gcServer的完整文档可以在MSDN

中找到

gcConcurrent的完整文档可以在MSDN

中找到

答案 2 :(得分:1)

请参阅我的回答,其中包括以下各种GC配置/模式的说明:

Determining which garbage collector is running