2011-07-02 10 views
2

SlimDXでD3DImageを使用しています。D3DImage leaks?

D3DImageSourceというクラスを作成しました。このクラスはD3DImageを継承し、その中にSlimDX.D3D9.Surfaceを作成します。サーフェスはctorのD3DImageにも割り当てられます。

D3DImageSourceはIDisposableを実装し、呼び出されると内部サーフェスを破棄します。

私はWPFウィンドウのサイズを変更するたびに、ウィンドウの新しいサイズで新しいD3DImageSourceを作成し、古いものを破棄します。私はこの時点で内部表面を処分しても、まだ多くのメモリを食べています。 D3DImageには、適切に解放されていない内部バッファがあり、D3DImageにDisposeメソッドがないようです。

誰もこのような経験はありますか?

私はWin7x64、VS2010、.NET4、SlimDX x86を実行しています。

答えて

1

私はSlimDXを使用していないが、私は管理Direct3DのラッパーとD3DImageSourceを使用している、と私は表面を変更したとき、私はあなたの場合は、次の

d3dImageSource.Lock() 
d3dImageSource.SetBackBuffer(D3DResourceType.IDirect3DSurface9, IntPtr.Zero) 
d3dImageSource.Unlock() 

を行うことによって、元の表面を手放すためにD3DImageSourceを伝えますこれを既に持っていないなら、あなたはおそらくあなたのdisposeメソッドでそれを望みます。

また、頭が上がっています。サイズが変わるたびにイメージソースを再割り当てする必要はないと思います。サイズの変更では、バックバッファーのサーフェスを更新したサイズの新しいサーフェスに変更することができます。もちろん、このようにすることを選択した場合、上記のコードで古いサーフェスを最初にリリースする必要があります。

関連する問題