如何解决这个问题?
<小时/> 编辑 内存:5000字节 cpu:i5的44% 程序在运行时会变慢。
答案 0 :(得分:2)
这太多的代码无法彻底检查。
一些一般提示:评估您希望它使用多少内存。内存使用在运行时会增长还是在某些时候停止增长?如果它不断增长,你可能会有泄漏。有些软件包可以帮助您跟踪泄漏的位置,或者确保使用RAII(例如shared_ptr
)来管理您的内存。如果内存保持稳定,您可能需要重新访问算法并查看内存的使用位置。您是否分配了大量重复数据?
至于CPU使用情况,找出时间的唯一方法是分析您的应用程序并查看分析器所说的CPU花费的位置。然后,您可以处理较小的代码部分并确定如何改进它。最可能的改进是找到多项式(或更差)时间算法并使它们成为子多项式时间。
答案 1 :(得分:2)
解决这类问题的最佳方法是注释掉大块代码,直到你不再看到失控的CPU /内存,然后逐渐取消注释这些块直到你发现问题为止。
快速扫描代码后,我想知道你为什么要启动11个计时器来更新你的游戏对象。最好有一个计时器一次更新所有内容,然后进行一次Invalidate调用。
答案 2 :(得分:1)
您的高CPU负载可能来自您的主循环。
我通常使用像
这样的东西while(gameIsRunning) //Set this to false when the WM_QUIT message arrives
{
//handle all messages, if any
while (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//addition per loop code
//...
Sleep(1);
}
此外,您应该放弃计时器并查看QueryPerformanceTimer and QueryPerformanceFrequency的计时和测量。