我正在使用带有SlimDX的D3DImage。
我创建了一个名为D3DImageSource的类,它继承了D3DImage并在它的ctor中创建了一个SlimDX.D3D9.Surface。表面也被分配给ctor中的D3DImage。
D3DImageSource实现IDisposable并在调用时处理内部Surface。
每当我调整WPF窗口大小时,我都会使用新窗口大小创建一个新的D3DImageSource,并处理旧窗口。即使我此时处理内部表面,它仍然会占用大量内存。似乎D3DImage拥有一些未正确释放的内部缓冲区,并且D3DImage中似乎也没有Dispose方法。
有没有其他人经历过这样的事情?
我正在运行Win7x64,VS2010,.NET4,SlimDX x86。
答案 0 :(得分:1)
我没有使用过SlimDX,但我使用了D3DImageSource和一个托管的Direct3D包装器,当我更改曲面时,我告诉D3DImageSource通过执行以下操作来放开原始曲面
d3dImageSource.Lock()
d3dImageSource.SetBackBuffer(D3DResourceType.IDirect3DSurface9, IntPtr.Zero)
d3dImageSource.Unlock()
如果你还没有这个,你可能需要在你的处理方法中使用它。
另外,只是抬头。我不相信每次尺寸变化都需要重新分配图像源。在尺寸更改时,您可以使用更新的尺寸将后缓冲区曲面更改为新曲面。当然,如果您选择这样做,您仍然需要首先使用上面的代码释放旧表面。