c++ - 如何诊断/分析瞬时性能命中,C++

标签 c++ performance profiling

已解决:当简单的分析不够有效时,我编写了一个工具来告诉我哪里会出现性能问题。有关该工具如何工作的基本信息在下面接受的答案中。来源可以在这里找到:http://pastebin.com/ETiW8hE8 (一定要在你正在测试的程序中打开调试符号)

我用 C++ 构建了一个游戏引擎,我注意到在某个关卡的特定区域存在短暂的性能下降。游戏会完全停止大约半秒钟,然后愉快地继续。我已经尝试对此进行分析,但很难隔离这种情况,因为我还必须加载 map 并执行导致性能下降的游戏内任务。我可以自动加载 map 并跳过显示菜单等,并将这些配置文件结果与一组类似的控制数据进行比较(所有相同的步骤但实际上没有启动性能命中),但它没有显示任何明显的东西。

我正在使用 gmon 进行分析。

这是一个大型应用程序,包含许多类和函数。性能下降只会发生一次,因此无法在一次执行期间多次触发问题以使我的分析结果饱和,从而使有问题的功能在分析结果中更加明显。

我还能做什么?

最佳答案

我会做的是尝试 grab a stack sample在它卡住的那半秒。 这将需要一个闹钟计时器设置为在未来的某个小时间关闭,比如 100 毫秒。 然后在一些循环中,比如帧显示循环,通常需要不到 100 毫秒的时间来重复,不断重置计时器。 这样一来,如果您不继续抚摸它,它就会充当看门狗并吠叫。

然后,在定时器中断处理程序中设置一个断点。 当它到达那里时,你知道你正处于糟糕的时间段。 然后只显示调用堆栈,它应该会告诉您问题出在哪里。

您可能需要重复这个过程几次。

关于c++ - 如何诊断/分析瞬时性能命中,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23234247/

相关文章:

Java 线程分析 : Determine Thread waits for specific locks and duration of each wait

javascript - jQuery 1.3 与 1.4(性能)

c++ - 打印时 UINT16 值显示为 "backwards"

c++ - 统一调节程序执行率[Windows C++]

python - 哪个更快? `list.pop(0)` 与 `del list[0]` ?

C++比较 vector ,更快的方法

javascript - 选择大量复选框并取消/选择它们的最快方法是什么?

c++ - std::pow 的性能 - 缓存未命中?

c++ - SFINAE 在重载决议之外?

c++ - 作为宏参数的范围内的枚举声明