.Net GC関連

・85,000byte以上のオブジェクトはいきなりLarge Object Heapに置かれてコンパクションの対象外。
・Large Object HeapはGen2と同等っぽいんだけど細かくはわかんね。
ワークステーションGCとサーバGCは構成ファイルのgcServerで変更

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

サーバGCだとマークもスウィープもマルチスレッドで行う。

ワークステーションGCにはさらに二つのモードがある。
構成ファイルでいうとgcConcurrentで設定する部分。
マルチプロセッサ環境で Workstation モードを使用した場合、GC は同時実行する。
通常処理と別スレッドでGC作業の一部(Workstation モードではマークだけ別スレッド。スウィープは別スレッドで行わない。)
ConcurrentをFalseにしたらマークも別スレッドにしなくなるんだと思う。

並列度を上げた方がGCのボトルネックは下がるけど、メモリの使用量が増えてしまうので注意。

・mid life crisis
短期間で回収されるべきオブジェクトのジェネレーションが上がってしまっているせいでGCがパフォーマンス負荷になることがある。
プログラムで不必要なGC呼び出しを明示的にしていた時なんかに起こる??

パフォーマンスカウンタの.NetMemoryの%Time in GCでGCに使っている時間を確認。
10%以下ならチューニングの効果は期待できない。
30%以上GCに時間を費やしているようならmid life crisisを疑うこと。

http://msdn2.microsoft.com/ja-jp/library/yhwwzef8(VS.80).aspx
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld06/directxworld06_03.html
http://www.microsoft.com/japan/serviceproviders/technical/060718_9.mspx
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld06/directxworld06_03.html
http://msdn.microsoft.com/ja-jp/magazine/cc163491.aspx
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld06/directxworld06_02.html