C# 如何在.NET4中禁用显式垃圾收集?

C# 如何在.NET4中禁用显式垃圾收集?,c#,.net,garbage-collection,C#,.net,Garbage Collection,我在应用程序中使用第三方库,其中通常显式调用GC.Collect()方法。 问题是它会产生死锁(这是显式调用gc的一个众所周知的问题) 如何配置我的应用程序(app.config),使其忽略GC.Collect() 注:我知道如何在Java中实现这一点(通过使用-XX:+DisableExplicitGC标志), 但是我不知道如何在.Net中实现它。在C#/.Net中不能关闭GC 但是,您可以告诉它不要在单独的线程中运行,这可能会帮助您: 但是,没有办法让第三方库的供应商修复他们糟糕的代码吗?

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

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

注:我知道如何在Java中实现这一点(通过使用-XX:+DisableExplicitGC标志),

但是我不知道如何在.Net中实现它。

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

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


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

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

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

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

MSDN:


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

我的第一反应是你应该使用不同的第三方库。通常,您不需要进行显式垃圾收集。有一些罕见的情况,但如果你有一个图书馆,经常这样做,它是有问题的。