2

我正在为 direct3d 学习的教程是这样说的:

“...基本上,如果您创建 Direct3D,但从不关闭它,它会一直在计算机后台运行,直到您下次重新启动,即使在程序本身关闭之后也是如此。糟糕。如果你有很多游戏中的资源。释放这两个接口让一切都摆脱困境,并允许 Windows 收回它的内存。(链接

我真的不相信本教程所说的,退出进程后资源仍然会挂起......

就像我的程序崩溃或者我只是在调试时按停止..资源仍然存在吗?和其他使用directx的游戏,我经常通过杀死进程来关闭它们。

如果我退出我的进程并且不调用 device->Release,资源是否会免费提供给操作系统?

4

2 回答 2

4

简单地说,没有。那不是真的。当您的进程终止时,您的所有 DirectX 资源都将被释放,并且不会泄漏任何 GPU 或系统内存。

于 2011-05-26T15:15:25.613 回答
1

虽然确实会回收与进程相关的资源,例如内存、线程、句柄等,但请记住,D3D 也在使用视频硬件上的内存和资源。根据您的具体实现,未能通知 D3D 您正在关闭可以并且不会在进程退出时清除所有这些。

我已经看到在使用托管 DX9 接口的软件中出现了一些非常有趣的渲染伪影,这些伪影在进行 EvictManagedResources调用之前无法清理。这些工件出现在自动化测试套件中,是的 - 它们在同一进程的不同调用之间持续存在(作为显示/帧缓冲区上的垃圾小矩形)。

正确编码的应用程序仍然可以对内部异常和/或进程终止请求(WM_QUERYENDSESSION 等)做出适当的反应并执行此清理。

于 2011-05-26T16:05:25.923 回答