Managed DirectX病

Dispose忘れて落ちるというバグを出してしまいました。これだからManagedは……。まぁレンダリング毎にLine(Unmanagedで言えばD3DXLine)を作っていたのが原因なので非がこちらにないとも言い切れないわけですが。あとバグの原因が完全にそれだと断定できるわけでもないし。
というわけで、Managed DirectXをやっていて困るのがこのDisposeです。もともとデストラクタが呼び出されるタイミングが自分で決められない仕組みなので、リソースの開放は明示的に行う必要があります。C++ならCComPtrを使っていればよかったんですが、そうもいかないわけです。開放にはDisposeというメソッドを呼びます。テクスチャやメッシュを含むクラスを自分で作った場合には、IDisposableを継承して、Disposeを実装します。面倒です、ハイ。usingっていう仕組みもあるんですが、それもなんとも言えないです。というかusingっていうキーワードに3つも意味もあるのはどうかと。以下に列挙。

  1. C++と同じように名前空間を使う時 (using namespace Microsoft.DirectX)
  2. 名前空間を別の名前で宣言しなおす時 (using DirectX = Microsoft.DirectX)
  3. Disposeを自動的に呼ばせる時 (using (AnyClass ac = new AnyClass()) {...} )