2011-07-02 110 views
2

我在SlimDX上使用D3DImage。D3DImage泄漏?

我創建了一個名爲D3DImageSource的類,它繼承D3DImage並在它的ctor中創建一個SlimDX.D3D9.Surface。曲面也分配給ctor中的D3DImage。

D3DImageSource在調用時實現IDisposable並處理內部曲面。

每當我調整我的WPF窗口的大小時,我都會創建一個新的窗口大小的D3DImageSource,並處理舊的窗口。即使我此時處理內部表面,它仍然吃了很多內存。看起來好像D3DImage保存了一些內部緩衝區沒有正確釋放,並且似乎在D3DImage中也沒有Dispose方法。

有沒有其他人經歷過這樣的事情?

我正在運行Win7x64,VS2010,.NET4,SlimDX x86。

回答

1

我沒有用過SlimDX,但我已經使用D3DImageSource與託管Direct3D的包裝,當我改變表面我告訴D3DImageSource做讓原始表面的去以下

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

如果您沒有這個,你可能需要它在你的dispose方法中。

此外,只是擡起頭來。我不相信每次尺寸改變時都需要重新分配圖像源。在尺寸改變時,您可以將後緩衝器表面更改爲具有更新尺寸的新表面。當然,如果你選擇這樣做,你仍然需要先用上面的代碼釋放舊的表面。