如何在.Net 4中禁用显式垃圾收集?

时间:2013-02-27 12:19:03

标签: c# .net garbage-collection

我在我的应用程序中使用第三方库,其中GC.Collect()方法经常被明确调用。
问题是它会产生死锁(这是一个明确调用gc的众所周知的问题)。

如何配置我的应用程序(app.config)以便忽略GC.Collect()?

P.S。:我知道如何在Java中执行此操作(使用-XX:+ DisableExplicitGC标志),
但我不知道如何在.Net中做到这一点。

2 个答案:

答案 0 :(得分:4)

您无法在C#/ .Net。

中关闭GC

但是,你可以告诉它不要在一个单独的线程中运行,可能可以帮助你:

http://msdn.microsoft.com/en-us/library/at1stbec%28v=vs.100%29.aspx

但是,没有办法让第三方库的供应商修复他们糟糕的代码吗?

答案 1 :(得分:4)

我不知道有什么方法可以“忽略”对GC.Collect()的调用。有一些配置选项可用,但我怀疑他们会解决你的死锁问题:

<configuration>
    <runtime>
        <gcServer enabled="true|false"/>
        <gcConcurrent enabled="true|false"/>
    </runtime>
</configuration>

它们基本上是切换垃圾收集模式,但它们不会禁用对GC.Collect()的调用。

MSDN:gcServergcConcurrent

我认为调查为什么会在您的应用程序中产生死锁会更明智。第三方库(哪个库?)由于某种原因可能正在调用GC.Collect()。也许你可以提供更多细节?