为什么配置.NET垃圾回收器不会';不行?

为什么配置.NET垃圾回收器不会';不行?,.net,garbage-collection,.net,Garbage Collection,我正在努力理解如何将.NET4.0上的垃圾收集器模式从工作站模式更改为并发模式。我发现我需要在一些配置文件中添加以下行: <configuration> <runtime> <gcConcurrent enabled="true"/> </runtime> </configuration> 但是,我不确定它们在这里指的是什么配置文件。尽管如此,我还是转到了C:\Windows\Microsoft.NET\F

我正在努力理解如何将.NET4.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模式设置为并发。所以我想我应该在C:\ProgramFiles(x86)\nunit 2.6.2\bin下配置nunit:nunit-x86.exe.config。这也没有任何效果

有什么线索吗?我应该更新哪个配置文件

谢谢, 问候语,
Sorin

AFAIK默认情况下启用并发模式

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


请检查

这可能有几个原因。不经意间:

  • 没有app.config文件显然是个问题。CLR仅读取yourapp.exe.config文件进行配置
  • 您可能根本没有启用工作站GC。Windows服务器版本的默认值是服务器GC,在.config文件中配置了
    元素
  • 您可能正在使用调试器运行,并且启用了Visual Studio宿主进程。它使用不同的.config文件,因为EXE名称不同。配置文件必须命名为yourapp.vshost.exe.config
当您可以看到正在使用的是哪个.config文件时,猜测这一点并没有多大意义。从提升的Visual Studio命令提示符运行Fuslogvw.exe(右键单击快捷方式并选择以管理员身份运行)。单击设置并勾选“将所有绑定记录到磁盘”。运行你的程序。单击刷新并查看其中一个日志条目,您将看到一行类似于:

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


举个例子,这是为一个虚拟控制台模式应用程序生成的,从F5开始,在项目的调试选项卡中勾选了托管进程选项。

否,在我的机器上,它不处于并发模式;无论如何,不管默认模式是什么,问题是如何在特定模式下配置GC?