C#2.0時代のゲームプログラミング(2)

C++からC#になりGC*1が搭載されて、メモリ管理は楽になったように思われる。普通のコード(managed code)の世界ではそうなのだが、unmanaged codeの世界はそうとも言えない。


たとえば、サウンドやテクスチャと言ったリソースはGCに管理されたくない。なぜなら、テクスチャはビデオメモリに配備するので、ビデオメモリサイズを考慮に入れながら慎重にcacheしたい。こういうことがGCでは出来ない。仮にGCのpressure*2を設定できたとしても、この要件は満たせない。


よって、ゲームで使うようなリソースはGCに頼らず自前でcacheする仕組みが必要になる。これをcache systemと呼ぶことにしよう。YanesdkにはこのためのクラスCacheSystemが事前に用意されている。また、SoundLoader,TextureLoader,BitmapLoaderなどLoaderと名のつくクラスは、すべてこのCacheSystemクラスを利用して実装されている。サウンドやテクスチャ(Yanesdkではすべての画像はTextureとして扱っている)を使う場合に、これらのクラスを利用すれば、自動的にcache systemの恩恵にあやかれる。(つづく)

*1:Garbage Collector

*2:≒圧力。このunmanaged resourceは、1MB消費しますよというような指定をする