我正在为direct3d采取的教程说:
“...基本上,如果您创建Direct3D,但从不关闭它,它将继续在计算机的后台运行,直到您下次重新启动,即使程序本身关闭。糟糕。如果你有特别糟糕的话游戏中的大量资源。释放这两个界面让一切都摆脱困境,让Windows收回它的内存。“ (link)
我真的不相信本教程所说的,在您退出流程后资源仍然存在...
就像我的程序崩溃或者我只是在调试时按停止..资源还在闲逛吗?和其他使用directx的游戏一样,我经常通过杀死进程来关闭它们。
如果退出我的流程并且不调用device-> Release,那么资源是免费的吗?
答案 0 :(得分:3)
简单地说,不。事实并非如此。当您的进程终止时,将释放所有DirectX资源,并且不会泄漏GPU或系统内存。
答案 1 :(得分:1)
虽然回收过程相关的资源(例如内存,线程,句柄等)是正确的,但回想一下D3D也在利用视频硬件上的内存和资源。根据您的具体实施情况,未能通知D3D您正在关闭可以并且不会在流程退出时清除所有这些内容。
我已经看到一些非常有趣的渲染工件出现在使用Managed DX9接口的软件中,在进行EvictManagedResources调用之前无法清理。这些工件发生在自动化测试套件中,是的 - 它们在相同进程的单独调用之间持续存在(显示器/帧缓冲区上的小矩形垃圾)。
正确编码的应用程序仍然可以对内部异常和/或进程终止请求(WM_QUERYENDSESSION等)做出适当的反应并执行此清理。