2013-02-27 20 views
2

我在我的應用程序中使用第三方庫,其中GC.Collect()方法通常被顯式調用。
問題是它會產生死鎖(這是一個衆所周知的顯式調用gc的問題)。如何禁用.Net 4中的顯式垃圾回收?

如何配置我的應用程序(app.config),以便它會忽略GC.Collect()?我知道如何做到這一點在Java(通過使用-XX:+ DisableExplicitGC標誌),
但我不知道如何在.Net中做到這一點。

+6

我對此的第一反應是你應該使用不同的第三方庫。通常你永遠不需要做一個明確的垃圾收集。有一些難得的場合,但是如果你有一個頻繁使用它的圖書館,那麼它會出現問題。 – Guffa 2013-02-27 12:28:53

回答

4

我不知道有什麼方法可以「忽略」調用GC.Collect()。有可用的一些配置選項,但我懷疑他們會解決您的死鎖問題:

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

他們基本上切換垃圾收集模式,但他們並不禁用GC.Collect的()調用。

MSDN:gcServergcConcurrent

我認爲這將是更明智的調查爲什麼這是在您的應用程序中產生死鎖。第三方庫(哪個庫?)可能由於某種原因而調用GC.Collect()。也許你可以提供更多的細節?