为什么配置.NET垃圾收集器不起作用?

时间:2014-06-04 09:38:34

标签: .net garbage-collection

我很难理解如何将.NET 4.0上的垃圾收集器模式从Workstation更改为Concurrent模式。我发现我需要将这些行添加到一些配置文件中:

<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。所以我想我应该在C:\ Program Files(x86)\ NUnit 2.6.2 \ bin下配置nunit: nunit-x86.exe.config 。这也没有任何效果。

任何线索?我应该更新哪个配置文件?

谢谢, 问候,     索林

2 个答案:

答案 0 :(得分:3)

这有几个可能的原因。在我的头顶:

  • 没有app.config文件显然是个问题。 CLR仅读取配置
  • 的yourapp.exe.config文件
  • 您可能根本没有启用工作站GC。 Windows服务器版本的默认设置是服务器GC,使用.config文件中的<gcServer>元素配置
  • 您可能正在使用调试器运行并启用了Visual Studio Hosting Process。由于EXE名称不同,因此使用不同的.config文件。配置文件必须命名为yourapp.vshost.exe.config

当您可以查看使用哪个.config文件时,没有多大意义。从提升的Visual Studio命令提示符运行Fuslogvw.exe(右键单击该快捷方式,然后选择以管理员身份运行)。单击设置,然后勾选“记录所有绑定到磁盘”。运行你的程序。单击“刷新”并查看其中一个日志条目,您将看到类似于:

的行
  

日志:使用应用程序配置文件:c:\ projects2 \ ConsoleApplication43 \ bin \ Debug \ ConsoleApplication43.vshost.exe.Config

只是一个例子,这个是为虚拟控制台模式应用程序生成的,以F5启动,并在项目的Debug选项卡中勾选了Hosting Process选项。

答案 1 :(得分:2)

AFAIK默认启用并发模式。

  

默认情况下,运行时使用并发垃圾收集,该收集针对延迟进行了优化。如果将元素的enabled属性设置为false,则运行时将使用非并发垃圾回收,该回收针对吞吐量进行了优化。以下显示了如何禁用并发垃圾回收。

请检查http://msdn.microsoft.com/en-us/library/at1stbec(v=vs.110).aspx