我在我的应用程序中使用第三方库,其中GC.Collect()方法经常被明确调用。
问题是它会产生死锁(这是一个明确调用gc的众所周知的问题)。
如何配置我的应用程序(app.config)以便忽略GC.Collect()?
P.S。:我知道如何在Java中执行此操作(使用-XX:+ DisableExplicitGC标志),
但我不知道如何在.Net中做到这一点。
答案 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:gcServer,gcConcurrent。
我认为调查为什么会在您的应用程序中产生死锁会更明智。第三方库(哪个库?)由于某种原因可能正在调用GC.Collect()。也许你可以提供更多细节?