CLR中的GC,存在着两种Mode。Server Mode的GC和Workstation Mode的GC。同时,在有些情况下,还会遇到并发的GC。
Server GC只适合于在多CPU的主机上面使用。这种GC模式,为每一个处理器都独立的创建一个GC Heap,这样就可以进行并发的同步的收集。这样做的好处也是显而易见的:在相同的时间里面可以处理更多的用户请求。切实的带来性能的成倍提升。同时,这中模式相对于在多处理器下使用并发模式更加的有效。
而Workstation Mode GC,它适合于单处理器的machine。同时它也是默认的GC模式。
这里,还要说到一种并发式的GC,也就是在多处理器的machine上面配置的是Workstation Mode GC模式的时候GC的操作方式。在多处理器上面的应用程序运行的时候,它可以并发收集,来减少request的等待时间。这种模式,比较适合于有图形用户接口的应用程序或者是对实时性要求很高的系统。
对于Server GC的实现,是在MScorSvr.dll里面的。而对于Workstation GC的实现,是封装在MsCorWks.dll中的。知道了这些,对于判断咱电脑上运行的是Server GC还是Wrokstation GC的判断也比较简单,用tasklist命令就可以了:
>tasklist /m mscorwks.dll
Image Name PID Modules
OUTLOOK.EXE 3352 mscorwks.dll
mmc.exe 2084 mscorwks.dll
w3wp.exe 3436 mscorwks.dll
或者,也可以到管理工具中查看系统配置。控制面板里面的管理工具,然后打开Microsoft .NET Framework 2.0 Configuration。查看我的电脑的属性:
默认情况下的配置,就是使用Wrokstation GC。
另外一个比较特别也比较普遍的使用方式,就是在一个非宿主托管应用程序,也就是一个用户App,的配置文件里面,可以手工的增加一个配置节点来改变这个GC的mode:
<configuration>
<runtime>
<gcServer enabled="true" />
</runtime>
</configuration>
这里,需要特别指出来一下,这里说明的是非寄宿的应用程序。如果运行的应用程序是Hosted,这个时候,host的对于GC的配置,就会覆盖这个.config文件里面关于GC模式的配置。
在配置使用这些模式的时候,如果是单处理器的machine,就使用Workstation GC。如果是多处理器的时候,如果是看中整个系统的吞吐量,就可以使用Server GC。如果是看中整个系统的实时响应特征,则可以选择并发模式的GC。