Xnaでの開発はガベージコレクションを意識しなければならない

携帯アプリの時は、ガベージコレクションはあまり意識してませんでしたが…、XnaXbox360実機で動かした時に発生するガベージコレクションはヤバイ…です。60FPSで動かしていると、発生した瞬間がはっきり分かるほど止まる…のです。Xnaの開発キットについてくるパフォーマンスモニタで測定してみると、ガベージコレクションのレイテンシが82msとか出てるんで、約5フレーム分は画面が停止することになるという…。ひぎぃぃぃ…って感じです。
回避方法は、とにかく毎フレーム毎の処理でヒープを消費している部分を見つけて潰していくことに尽きるかと思います。例えば、文字列や配列を生成したり、foreachの条件式内部でIEnumratorへの変換が起きているような箇所(例:EffectPassクラスなど)ですね。
初めは1秒に1〜2回発生するという脱力笑いが出るような酷い状態でしたが、何とか数十秒に1度くらいまで軽減できました。それでもまだまだ多いですけどね…。
問題は、箱○で動かした時に初めて発覚すること。普段開発しているPC上の確認ではパフォーマンスが良いのか、全然気がつかないのですよ。


備忘録のつもりで書いておきましたが、忘れずにちゃんと意識してやってないと、また後で痛い目を見そうだ…。