C#/CLR とリアルタイムゲームプログラミング
最近 C# 2.0 でパフォーマンス調査用にシューティングゲームを作っていたのですが,事前に確保した固定長の値型配列を上手く使うことで,ほとんどの Gen2 GC は回避可能という印象を受けました.パフォーマンスカウンタの「% Time in GC」も平均で 1 % 以下です.
ただし,結果として,一般に見られる C# 開発とはずいぶん異なった設計になったことも事実です.
こういった .NET アプリケーションの最適化作業については,C# でプログラミングを始めたという人に一から説明して理解してもらうよりは,C++ などでの開発経験がある人に CLR の構造について説明し,VTune でも渡して実際に確かめてもらう方が早いように思います.
そんなわけで「マネージドコードは遅くて使えない」と言っている人が,次のどちらに該当するかを判断するのは読み手の責任です.
- 全ての手法を理解した上で,それでも回避不能な問題が存在し,それを意図して発言している
- 他のアプリケーションと似たような設計を行ったらパフォーマンスがでなかったことを言っている
とはいえ,パフォーマンス目的に設計を弄っていくと,普段見慣れた C# のコードとは似ても似つかないものになりがちなのは確かなので,そういう意味では安易に「できる」と思われない方が良いのかなという気もします.