GCSettingsクラス
NyaRuRuさんの6/12の日記「.NET GC & Memory (1)」を見ていたときにGC(ガベージコレクション)のアルゴリズムを.configファイルで指定する方法が紹介されていたが、
<?xml version="1.0" encoding="utf-8" ?> <configuration> <runtime> <gcServer enabled="true" /> </runtime> </configuration>
.NETはJavaとは違い、このようにランタイム外部からGCに触ることはできないと思っていたので、驚いた。(.NET1.1の時代からこんな設定あったけ?)
アプリケーション側からこの値を取得、制御できないのだろうかと思って調べたら、見つけたのが標題のGCSettingsクラスだ。クラスといってもまともに使うだろうと思えるのは唯一つのプロパティ、IsServerGCプロパティだけ。
GCSettings.IsServerGC プロパティ
public static bool IsServerGC { get; }
サーバーのガベージ コレクションが有効であるかどうかを示す値を取得します。
ところでこのプロパティ、何の目的に使用するのだろう。普通に考えるとCLRは.configファイルで指定されたサーバGCアルゴリズムが適用可能かを検査し、使えなければ勝手にワークステーションに切り替える訳で、アプリケーション内部でサーバGCがサポートされているかを判断する意味は無いと思うのだが。
MSDNには以下のように書いてある。
アンマネージ ホストはサーバーのガベージ コレクションを要求でき、ホスト要求は構成ファイルの設定をオーバーライドします。ホストがガベージ コレクションの種類を指定しない場合は、構成ファイルの設定を使用してサーバーのガベージ コレクションを指定できます。〜
[- IsServerGC 解説]
アンマネジホストだと、設定ファイルのGCアルゴリズムをオーバライドできるということみたいだが、この文脈での"アンマネジホスト"とは何を指すのだろう。ASP.NET等のCLRホストのことなのだろうか?
個人的には、使用ユーザのPCの構成(シングル/マルチプロセッサ、メモリ搭載量、etc.)でGCアルゴリズムを切り替えることができると面白いなと思ったのだが、アンマネジドホストだけがオーバライド可能なのであれば無理ぽいな。残念(でも、よく考えたらgcServerに関してはASP.NETでしか意味が無いような気もするからいいのか)