D3DImage泄漏了吗?

时间:2011-07-02 11:36:19

标签: wpf direct3d

我正在使用带有SlimDX的D3DImage。

我创建了一个名为D3DImageSource的类,它继承了D3DImage并在它的ctor中创建了一个SlimDX.D3D9.Surface。表面也被分配给ctor中的D3DImage。

D3DImageSource实现IDisposable并在调用时处理内部Surface。

每当我调整WPF窗口大小时,我都会使用新窗口大小创建一个新的D3DImageSource,并处理旧窗口。即使我此时处理内部表面,它仍然会占用大量内存。似乎D3DImage拥有一些未正确释放的内部缓冲区,并且D3DImage中似乎也没有Dispose方法。

有没有其他人经历过这样的事情?

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

1 个答案:

答案 0 :(得分:1)

我没有使用过SlimDX,但我使用了D3DImageSource和一个托管的Direct3D包装器,当我更改曲面时,我告诉D3DImageSource通过执行以下操作来放开原始曲面

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

如果你还没有这个,你可能需要在你的处理方法中使用它。

另外,只是抬头。我不相信每次尺寸变化都需要重新分配图像源。在尺寸更改时,您可以使用更新的尺寸将后缓冲区曲面更改为新曲面。当然,如果您选择这样做,您仍然需要首先使用上面的代码释放旧表面。