【发布时间】:2015-09-30 03:35:34
【问题描述】:
我一直在解决我的软件中的内存泄漏问题,我的应用程序的虚拟地址空间被共享内存慢慢耗尽。从泄露的内存量来看,很明显是以纹理对象的形式出现的。
我已将错误隔离到以下代码示例。我创建了一个可共享的 DX9 纹理对象,从 D3D11 设备打开它,然后释放它。在此示例中,在我的 NVIDIA GeForce 780 Ti 上运行 Windows 8.1,我的 32 位进程很快耗尽了 VAS,因为这些纹理似乎没有被释放。
我是否误解了某个 API,DirectX 中是否存在错误,或者我的 GPU 驱动程序中是否存在错误?非常感谢任何有关解决此问题或与谁联系的建议。
while (true)
{
IDirect3DTexture9* tex = nullptr;
HANDLE handle = 0;
hr = device9->CreateTexture(1024, 1024, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &tex, &handle);
VERIFY_SUCCEEDED(hr);
ID3D11Texture2D* tex11;
hr = device11->OpenSharedResource(handle, __uuidof(ID3D11Texture2D), (void**)&tex11);
VERIFY_SUCCEEDED(hr);
tex11->Release();
tex->Release();
Sleep(10);
}
如果我注释掉“OpenSharedResource”部分,则没有泄漏。 DirectX 9 纹理被反复创建和释放,没有问题。
while (true)
{
IDirect3DTexture9* tex = nullptr;
HANDLE handle = 0;
hr = device9->CreateTexture(1024, 1024, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, &tex, &handle);
VERIFY_SUCCEEDED(hr);
//ID3D11Texture2D* tex11;
//hr = device11->OpenSharedResource(handle, __uuidof(ID3D11Texture2D), (void**)&tex11);
//VERIFY_SUCCEEDED(hr);
//tex11->Release();
tex->Release();
Sleep(10);
}
【问题讨论】:
标签: c++ directx directx-11 directx-9