【发布时间】:2014-10-03 00:39:11
【问题描述】:
我使用游戏引擎,随着游戏的进行,任何未使用的纹理,例如过去关卡中的纹理,似乎都不会自动清除。开发人员虽然声明 DirectX 不需要手动清除其纹理,它只是在不使用时自动将它们换掉。
但是,我的游戏似乎在每个不同级别都会增加其内存使用量。我仍在测试泄漏等,但是我想使用 EmptyWorkingSet winapi 函数来降低内存使用量。
我确实有应用程序的 HWND,如何获取它的进程 id 并使用 EmptyWorkingSet 清除未使用的内存?
【问题讨论】:
-
GetWindowThreadProcessId返回创建窗口的进程的标识符。 -
嗯,首先,
EmptyWorkingSet接受进程句柄,而不是进程 ID。其次,如果这是您自己的进程,那么GetCurrentProcess(将提供句柄。第三,正如@DavidXu 指出的那样,这并没有真正的帮助。例如,纹理不计入工作集,因为它们驻留在 GPU 上,而不是主内存。
标签: c++ windows winapi memory-management process