2013-07-29 63 views
5

是否有一個直接的函數調用來確定併發GC是否已在我運行的運行時中啓用?我們有一個異構環境,我們需要記錄正在使用哪種模式,以便我們可以確定哪些系統需要修改。如何檢測併發GC是否正在運行.Net

我意識到我可以調查exe.config並手動檢查它,我只是想知道是否有一個屬性坐在某處暴露此信息而無需進行破解。

+0

垃圾收集通知http://msdn.microsoft.com/en-us/library/cc713687.aspx – Rohit

+0

沒有收到回調是一種相當不精確的方式來測量GC是否是併發的... – Spence

+0

它看起來像它是配置文件的一部分。看到這個鏈接幫助任何http://msdn.microsoft.com/en-us/library/yhwwzef8.aspx –

回答

4

不幸的是,它看起來並不像有一種方法,如果有我期望看到它在這裏:System.Runtime.GCSettings.

除非你有一個很好的理由最好離開併發垃圾收集(作爲默認值)。

通常,唯一需要關注的是託管CLR的非託管應用程序(如SQL Server或IIS)。

您的應用程序是否可以通過編程方式更改exe.config中的gcConcurrent?如果不是這樣,看起來就像你說的那樣,從配置中讀取值是不太冒犯的方式(恕我直言)。

從來沒有少,我做了一些調查,並在.NET 4中開始,你可以使用ETW to detect garbage collection ETW events

Windows事件追蹤(ETW)是一種跟蹤系統,以補充 的分析和調試支持由.NET Framework提供。 從.NET Framework 4開始,garbage collection ETW events 從統計的角度捕獲用於分析託管堆的有用信息。例如,GCStart_V1事件,這是 升高時無用單元收集將要發生時,提供 以下信息:

  • 正在收集的對象的生成。
  • 什麼觸發了垃圾回收。
  • 垃圾收集類型(併發或不併發)
+1

感謝您的徹底解答。內存泄漏狩獵(你不能連接內存泄漏分析器與併發GC,所以我們需要選擇性地使它嘗試和附加。 – Spence

5

如果System.Runtime.GCSettings.LatencyMode的值爲LatencyMode.Batch那麼併發GC已被禁用。

+0

這是最近我見過任何人得到 – Spence

相關問題