.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