为什么配置.NET垃圾回收器无法正常工作?

3

我很难理解如何将.NET 4.0的垃圾回收器模式从工作站切换到并发模式。我发现需要将以下代码添加到某个配置文件中:

<configuration>
   <runtime>
      <gcConcurrent enabled="true"/>
   </runtime>
</configuration>

然而,我不确定他们在这里指的是哪个配置文件。尽管如此,我去了位于C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config下的machine.config,希望这是一个机器范围的设置,但仍然没有帮助。我注意到我的dll也有它们自己的配置文件,但更新它们也没有帮助。 请注意,我的应用程序没有app.config。
后来,在nunit中运行了一个测试dll,我也想将GC模式设置为Concurrent。所以我认为我应该配置nunit:nunit-x86.exe.config位于C:\Program Files(x86)\NUnit 2.6.2\bin下。但这也没有任何效果。
有任何线索吗?我应该更新哪个配置文件?
谢谢, 问候, Sorin
2个回答

3
有几个可能的原因。以下是我能想到的:
- 没有app.config文件显然是一个问题。CLR只读取yourapp.exe.config文件中的配置。 - 你可能根本没有启用工作站GC。Windows服务器版本的默认设置是使用server GC,可以通过.config文件中的元素进行配置。 - 你可能正在使用调试器并启用了Visual Studio Hosting Process。由于EXE名称不同,它使用不同的.config文件。配置文件必须命名为yourapp.vshost.exe.config。
瞎猜没有多大意义,你可以看到使用哪个.config文件。从提升的Visual Studio命令提示符中运行Fuslogvw.exe(右键单击快捷方式,选择以管理员身份运行)。点击Settings并选中“将所有绑定记录到磁盘上”。运行你的程序。点击Refresh,查看日志条目中的一条,你会看到类似下面这样的一行:
LOG: Using application configuration file: c:\projects2\ConsoleApplication43\bin\Debug\ConsoleApplication43.vshost.exe.Config
这只是一个例子,这是为了一个虚拟控制台模式应用程序生成的,使用F5启动并在项目的Debug选项卡中选中了Hosting Process选项。

2
据我所知,并发模式默认已启用。
默认情况下,运行时使用并发垃圾回收,这是为了最小化延迟。如果您将 元素的 enabled 属性设置为 false,则运行时将使用非并发垃圾回收,这是为了最大化吞吐量。以下内容展示如何禁用并发垃圾回收。
请参阅 http://msdn.microsoft.com/en-us/library/at1stbec(v=vs.110).aspx

不,我的机器上它没有在并发模式下运行;无论默认模式是什么,问题是如何在特定模式下配置GC? - Sorin-Alexandru Cristescu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接