我在SlimDX中使用D3DImage。
我创建了一个名为D3DImageSource的类,它继承了D3DImage,并在它的ctor中创建了一个SlimDX.D3D9.Surface。曲面也将指定给ctor中的D3DImage。
D3DImageSource实现IDisposable并在被调用时释放内部Surface。
每当我调整WPF窗口的大小时,我都会用窗口的新大小创建一个新的D3DImageSource,然后释放旧的。即使我在这个时候处理了内部表面,它仍然消耗了大量的内存。D3DImage中似乎也没有Dispose方法,D3DImage似乎包含了一些未正确释放的内部缓冲区。
其他人有过类似的经历吗?
我在运行Win7x64,VS2010,.NET4,SlimDX x86。
发布于 2012-01-26 10:16:42
我没有使用过SlimDX,但我使用了带有托管Direct3D包装器的D3DImageSource,当我更改表面时,我通过执行以下操作告诉D3DImageSource放弃原始表面
d3dImageSource.Lock()
d3dImageSource.SetBackBuffer(D3DResourceType.IDirect3DSurface9, IntPtr.Zero)
d3dImageSource.Unlock()如果您还没有这个,那么您可能需要在dispose方法中使用它。
还有,先提个醒。我不认为每次大小改变时都需要重新分配图像源。在大小更改时,您只需将后台缓冲区表面更改为具有更新大小的新表面。当然,如果您选择这样做,您仍然需要首先使用上面的代码释放旧的表面。
https://stackoverflow.com/questions/6556764
复制相似问题