我在我的應用程序中使用第三方庫,其中GC.Collect()方法通常被顯式調用。
問題是它會產生死鎖(這是一個衆所周知的顯式調用gc的問題)。如何禁用.Net 4中的顯式垃圾回收?
如何配置我的應用程序(app.config),以便它會忽略GC.Collect()?我知道如何做到這一點在Java(通過使用-XX:+ DisableExplicitGC標誌),
但我不知道如何在.Net中做到這一點。
我在我的應用程序中使用第三方庫,其中GC.Collect()方法通常被顯式調用。
問題是它會產生死鎖(這是一個衆所周知的顯式調用gc的問題)。如何禁用.Net 4中的顯式垃圾回收?
如何配置我的應用程序(app.config),以便它會忽略GC.Collect()?我知道如何做到這一點在Java(通過使用-XX:+ DisableExplicitGC標誌),
但我不知道如何在.Net中做到這一點。
您不能在C#/ .Net中關閉GC。
但是,你可以告訴它不要在一個單獨的線程運行,這可能可以幫助你:
http://msdn.microsoft.com/en-us/library/at1stbec%28v=vs.100%29.aspx
但是,有沒有辦法讓第三方庫的供應商修復他們糟糕的代碼?
我不知道有什麼方法可以「忽略」調用GC.Collect()。有可用的一些配置選項,但我懷疑他們會解決您的死鎖問題:
<configuration>
<runtime>
<gcServer enabled="true|false"/>
<gcConcurrent enabled="true|false"/>
</runtime>
</configuration>
他們基本上切換垃圾收集模式,但他們並不禁用GC.Collect的()調用。
MSDN:gcServer,gcConcurrent。
我認爲這將是更明智的調查爲什麼這是在您的應用程序中產生死鎖。第三方庫(哪個庫?)可能由於某種原因而調用GC.Collect()。也許你可以提供更多的細節?
我對此的第一反應是你應該使用不同的第三方庫。通常你永遠不需要做一個明確的垃圾收集。有一些難得的場合,但是如果你有一個頻繁使用它的圖書館,那麼它會出現問題。 – Guffa 2013-02-27 12:28:53