2

我在我的应用程序中使用 3-rd 方库,其中 GC.Collect() 方法通常被显式调用。
问题是它会产生死锁(这是显式调用 gc 的众所周知的问题)。

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

PS:我知道如何在 Java 中执行此操作(通过使用 -XX:+DisableExplicitGC 标志),
但我不知道如何在 .Net 中执行此操作。

4

2 回答 2

4

您不能在 C#/.Net 中关闭 GC。

但是,您可以告诉它不要在单独的线程中运行,这可能会对您有所帮助:

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

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

于 2013-02-27T12:30:35.363 回答
4

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

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

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

MSDN:gcServergcConcurrent

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

于 2013-02-27T12:44:22.520 回答