DirectX 10 资源泄漏

6
在我的DirectX应用程序结束时,我遇到了"The Direct3D device has a non-zero reference count, meaning some objects were not released."的错误。这个应用程序很大而且不是我写的,我该如何调试哪些资源没有被释放?
2个回答

6
第一步是通过DirectX控制面板(通过DirectX SDK安装)使用DirectX调试DLL。运行应用程序后,DirectX将提供有关泄漏信息的更多详细信息。具体来说,您需要查找类似于以下行:
D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x1c17 to debug
                                                allocation id ^^^^^^

或者,像这样:

Direct3D9: (WARN) :Memory Address: 00385580 lAllocID=1 dwSize=000047f8, (pid=00000474)
                                       allocation id ^

一旦您拥有分配 ID,您可以通过在 DirectX 控制面板中设置“Break on AllocID”设置(或设置上述注册表键)来告诉 DirectX 在程序中发生该分配时中断。然后,只需检查调用堆栈以查看涉及哪个 DirectX 调用即可。

2
这个方法适用于DX10吗?我没有看到任何警告信息。 - worbel
答案与 DX10 无关,仅适用于要求 DX10 信息的提问者所请求的DX9。 - IneQuation

1
你可以使用DirectX控制面板实用工具,如此处所述。打开“断开内存泄漏”复选框,然后你可以使用“断开AllocID”来查找哪些资源没有被释放。

答案和DX10无关,仅适用于DX9,当提问者明确要求DX10信息时。 - IneQuation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接