分析功能内存和CPU使用情况

时间:2017-02-08 14:16:51

标签: c++ visual-studio debugging sfml

我正在制作一款视频游戏,这是一款相当小的2D射击游戏。最近我注意到,当场景中有大约9个子弹或更多时,帧速率会急剧下降。我的笔记本电脑可以处理高级3D游戏,我的游戏非常简单,所以硬件应该不是问题。

所以现在我有一个非常大的代码(至少对一个人来说),我很困惑,我应该寻找什么?有太多与子弹有关的功能和类,例如,我不知道如何分析渲染功能是否有问题或更新功能?我可以将MVS 2015调试工具用于其他程序,但是对于游戏来说,这是不实际的,例如,如果我在渲染功能之前放置一个断点,它应该在一秒钟内检查60次加上我无法输入任何东西所以我永远不会有子弹来测试渲染功能!我尝试使用任务管理器,并且我意识到每个子弹的CPU使用率都非常快,但是当游戏速度变慢时,只使用了10%的CPU!

所以我的问题是:

  • 当我无法使用调试工具时,如何分析函数?

  • 为什么游戏在仍然可以使用系统资源时会变慢?

3 个答案:

答案 0 :(得分:4)

要查看哪个部分消耗了大部分处理能力,您应该使用函数profiler。它没有“调试”,但它在完成时会创建一个报告。

Valgrind是一个很好的工具。

为什么游戏会变慢?取决于您的实施。我可以创建一个程序来划分两个数字,并花费5分钟来计算结果。

答案 1 :(得分:1)

我们也在视频游戏行业,我们在PC上使用一个非常简单的工具进行CPU分析:非常困倦。

http://www.codersnotes.com/sleepy/

这很简单,但很多次帮助了我。只需从IDE启动该程序,让几个样本的困难运行,然后离开!

答案 2 :(得分:0)

当谈到记忆漏洞时,Valgrind是一个很好的工具,正如量子物理学家已经注意到的那样。 为了计时,我会编写自己的小型跟踪/分析工具(如果我的IDE还没有)。使用文本调试输出将短消息写入日志文件。这样的事情:

void HandleBullet() {
    printf("HandleBullet START: %i", GetSysTime());
    // do your function stuff
    printf("HandleBullet END: %i", GetSysTime()); // or calculate time of function directly
}

将这些调试消息写入您认为可能需要太长时间的所有功能中。 经过一段时间后,您可以查看该文件,看看是否发生了明显的事情(阻塞某处)。 如果没有,请使用您选择的高级语言为您创建的日志文件编写一个小解析器,以整理和分析您的输出。计算一些功能所花费的总时间,或图表哪些功能花费的时间最长。如果您坚持使用易于解析的日志消息样式,那应该不会太难。