我正在使用Visual Studio在C ++中编写高性能应用程序(光线跟踪器),我花了两天时间试图根除我在重构代码后见证的性能下降。花了这么长时间的原因是因为性能下降小于我在运行中看到的执行时间的正常变化。
不确定这是否正常,但有时程序可能会以大约33fps的速度运行,然后如果你关闭并重新运行,它可能以37fps运行。这意味着为了测试任何新的变化,我必须手动运行并重新运行,直到我目睹峰值性能(并且这可能需要最多10次运行)。只需运行一些大量的帧,并测量时间并不能解决这种可变性。例如,如果程序平均运行40秒,那么它将变化超过1-2秒,这使得该测试几乎无法用于检测我正在处理的每帧1毫秒的性能损失。
Visual Studio的分析工具也没有帮助找到这个小问题,因为它们也受到变化的影响,无论如何,它不一定会告诉我确切的违规行,所以我必须测试解决方案,而剖析器在确认提出的解决方案的功效方面不是很有效。
我意识到这一切可能听起来像是过早优化,但我不认为这是因为我在完成完整功能后仅优化 ;我只是试图定期监控性能变化,以便上述问题不会出现,只会增加新功能的明显成本。
无论如何,我的问题是,是否有办法客观地确定"真实"申请的速度,折扣变化的影响。或者,如果不这样做,开发人员如何处理这些问题呢?我怀疑我目前的过程是否理想。
答案 0 :(得分:1)
有很多适用于 c++ 和 openGL 的分析器。对于那些只需要链接的人,这里有。
C++ profilers 但我推荐 Google orbit 因为它有深色主题。
我的眼睛停在
<块引用>客观衡量绩效
正如您提到的,速度因运行而异,因为它的系统太复杂了。如果范围很小并且它只测试一些关键算法,它会有所帮助。值得自动化并收集一些参考数据。正如每位科学家所说,一项测试不是一项测试,您应该依靠受控环境下的常规测试。
这里有一些可用于衡量性能的技巧。