D3DImage утечки? - PullRequest
       1

D3DImage утечки?

2 голосов
/ 02 июля 2011

Я использую D3DImage с SlimDX.

Я создал класс с именем D3DImageSource, который наследует D3DImage и создает SlimDX.D3D9.Surface в своем ctor. Поверхность также назначена D3DImage в ctor.

D3DImageSource реализует IDisposable и удаляет внутреннюю поверхность при вызове.

Всякий раз, когда я изменяю размер своего окна WPF, я создаю новый D3DImageSource с новым размером окна и избавляюсь от старого. Несмотря на то, что я располагаю внутренней поверхностью в это время, она все еще съедает ОЧЕНЬ много памяти. Кажется, что D3DImage содержит некоторый внутренний буфер, который не освобождается должным образом, и, похоже, в D3DImage нет метода Dispose.

Кто-нибудь еще испытывал что-то подобное?

Я использую Win7x64, VS2010, .NET4, SlimDX x86.

1 Ответ

1 голос
/ 26 января 2012

Я не использовал SlimDX, но я использовал D3DImageSource с управляемой оболочкой Direct3D, и когда я меняю поверхности, я говорю D3DImageSource отпустить исходную поверхность, выполнив следующие действия:

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

Еслиу вас этого еще нет, вы, вероятно, хотите это использовать в своем методе утилизации.

Кроме того, просто на голову.Я не верю, что вам нужно перераспределять источник изображения каждый раз, когда изменяется размер.При изменении размера вы можете просто изменить поверхность заднего буфера на новую поверхность с обновленным размером.Конечно, если вы решите сделать это таким образом, вам все равно нужно сначала выпустить старую поверхность с кодом выше.

...