如何检测并发GC是否在.Net中运行

本文关键字:是否 Net 运行 GC 并发 何检测 检测 | 更新日期: 2023-09-27 18:25:13

是否有一个简单的函数调用来确定在我运行的运行时中是否启用了并发GC?我们有一个异构的环境,我们需要记录正在使用的模式,以便确定哪些系统需要修改。

我意识到我可以调查exe.config并手动检查它,我只是想知道是否有一处房产可以在不进行黑客攻击的情况下暴露这些信息。

如何检测并发GC是否在.Net中运行

如果System.Runtime.GCSettings.LatencyMode的值为LatencyMode.Batch,则已禁用并发GC。

遗憾的是,它看起来并没有一个方法,如果有的话,我希望在这里看到它:System.Runtime.GCSettings.

除非有充分的理由,否则最好打开并发垃圾收集(默认情况下)。

通常,唯一关心这一点的是托管CLR本身的非托管应用程序(如SQL Server或IIS)。

您的应用程序是否适合以编程方式更改exe.config中的gcConcurrent?如果没有,就像你说的那样,从配置中读取值是一种不那么麻烦的方式(IMHO)。

尽管如此,我还是做了一些研究,从.Net 4开始,你可以使用ETW来检测垃圾收集ETW事件:

Windows事件跟踪(ETW)是一个补充.NET Framework提供的评测和调试支持。从.NET Framework 4开始,垃圾收集ETW事件从统计学观点。例如,GCStart_V1事件在即将发生垃圾回收时引发,提供以下信息:

  • 正在收集哪一代对象
  • 是什么触发了垃圾收集
  • 垃圾收集的类型(并发或非并发)