【问题标题】:Check the value gcTrimCommitOnLowMemory from .NET code检查 .NET 代码中的 gcTrimCommitOnLowMemory 值
【发布时间】:2014-02-24 14:28:42
【问题描述】:
我正在尝试确认我们更改的各种运行时设置是否已应用于我的应用程序。特别是 Aspnet.config 文件的 runtime 部分中的 gcTrimCommitOnLowMemory。如何检查当前应用程序的值?
我显然可以去阅读那个.config 文件,但我想检查我的应用运行时的运行值。
我已尝试搜索此内容无济于事。调用 ConfigurationManager.GetSection("runtime") 只会返回一个 System.Configuration.IgnoreSection 实例。
【问题讨论】:
标签:
.net
garbage-collection
【解决方案1】:
我会手动阅读.config 文件(这确实是我在相关案例中所做的)。想一想,当您使用System.Configuration API 时,后台也会发生这种情况。因此,即使不幸 [1],当他们不公开 runtime-Section 时,您仍然可以手动阅读并最终获得相同的效果。
结果的准确性也应该同样出色。如果有人在应用程序启动后更改这些设置的值,ConfigurationManage 理论上也会看到这些值,即使它们是“陈旧的”。所以自读方法在这里也不错。
FWIW,您可以使用以下 xpaths 来读取您所追求的值(加上这里经常感兴趣的另外两个):
/configuration/runtime/gcTrimCommitOnLowMemory/@enabled
/configuration/runtime/gcServer/@enabled
/configuration/runtime/gcConcurrent/@enabled
除了编写您自己的(本机 DLL)并在 CLR 的内存中探查之外,“trim commit”设置的实际运行时值似乎不会暴露给应用程序。
大家可以通过CoreCLR源码search看看配置值是如何展开的。
在 ASP.NET 应用程序中,您必须找到应用程序池实际使用的 aspnet.config 文件。我在这里没有经验,但this 文章提供了更多信息。
[1] 我认为运行时部分没有映射到正确的配置部分,甚至被托管ConfigurationManager 忽略,因为它被 CLR 的本机启动代码读取,因此“不感兴趣”到托管代码。