是否有一个简单的函数调用来确定我正在运行的运行时是否启用了并发 GC?我们有一个异构环境,我们需要记录正在使用的模式,以便我们可以确定哪些系统需要修改。
我意识到我可以调查 exe.config 并手动检查它,我只是想知道是否有一个属性位于某个地方可以公开此信息而无需进行黑客攻击。
是否有一个简单的函数调用来确定我正在运行的运行时是否启用了并发 GC?我们有一个异构环境,我们需要记录正在使用的模式,以便我们可以确定哪些系统需要修改。
我意识到我可以调查 exe.config 并手动检查它,我只是想知道是否有一个属性位于某个地方可以公开此信息而无需进行黑客攻击。
如果System.Runtime.GCSettings.LatencyMode
有该值LatencyMode.Batch
,则并发 GC 已被禁用。
可悲的是,它看起来不像有一种方法,如果有的话,我希望在这里看到它:System.Runtime.GCSettings.
。
除非您有充分的理由,否则最好保留并发垃圾收集(作为默认设置)。
通常,唯一关心这一点的是托管 CLR 本身的非托管应用程序(例如 SQL Server 或 IIS)。
您的应用程序是否适合以编程方式更改 exe.config 中的 gcConcurrent?如果没有,看起来就像你说的那样,从配置中读取值是不那么骇人听闻的方式(恕我直言)。
尽管如此,我还是做了一些研究,从 .Net 4 开始,您可以使用ETW 来检测垃圾收集 ETW 事件:
Windows 事件跟踪 (ETW) 是一个跟踪系统,它补充了 .NET Framework 提供的分析和调试支持。从 .NET Framework 4 开始,垃圾收集 ETW 事件 捕获有用的信息,用于从统计角度分析托管堆。例如,GCStart_V1 事件(在即将发生垃圾回收时引发)提供以下信息: