【问题标题】:D3DImage leaks?D3DImage 泄漏?
【发布时间】:2011-07-02 11:36:19
【问题描述】:

我将 D3DImage 与 SlimDX 一起使用。

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

D3DImageSource 实现 IDisposable 并在调用时释放内部 Surface。

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

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

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

【问题讨论】:

    标签: wpf direct3d


    【解决方案1】:

    我没有使用过 SlimDX,但我使用了带有托管 Direct3D 包装器的 D3DImageSource,当我更改表面时,我告诉 D3DImageSource 通过执行以下操作释放原始表面

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

    如果您还没有这个,您可能希望在您的 dispose 方法中使用它。

    另外,请注意。我不相信每次大小更改时都需要重新分配图像源。在大小更改时,您只需将后缓冲表面更改为具有更新大小的新表面。当然如果你选择这样做,还是需要先用上面的代码释放旧的surface。

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2012-05-04
      相关资源
      最近更新 更多