c ++高内存和cpu

时间:2010-08-17 19:20:41

标签: c++ visual-c++ memory-leaks cpu

好吧,我有一个简单的游戏,使用非常高的内存和CPU。 cpu超过44%,内存超过5000。 这是我的代码

Code

如何解决这个问题?

<小时/> 编辑 内存:5000字节 cpu:i5的44% 程序在运行时会变慢。

3 个答案:

答案 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的计时和测量。