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

unmanagedなリソースに対して、GCが無力であることは、前回説明した。実際のところ、ビデオメモリやサウンドメモリ上に存在するようなmanagedなリソースに対しても前回と同様の理由によりGCは無力なのである。「managedな世界に居れば、快適に暮らせる」というのはとんでもなく甘い幻想なのだ。


たとえば、サウンドリソースについて考えてみよう。


BGMを再生する。そのあとSE(効果音)をいくつか再生する。BGMはループ再生だ。
SEをたくさん再生するうちに、cacheがいっぱいになった。一番古い時刻に再生
メソッドを呼び出したものを解放しよう。どれだ?BGMだ。BGMを解放しよう。

これは、誤ったcache systemの実装だ。BGMはループ再生されているのであり、再生されている間は、“参照され続けている”とみなされなければならない。だから、一番古い時刻に再生が終了したSEから順番に、自動的にcache内から解放されなければならない。こういう処理までGCは面倒を見てくれない。


よって、扱うリソースのmanaged/unmanagedいかんに関わらず、cache systemは必須となるのだ。(つづく)