【发布时间】:2015-12-07 10:53:50
【问题描述】:
我正在开发 DirectX 游戏,我发现在发布构建期间我的平均速度为 170 fps,但在调试版本中我获得约 20 fps。
我想知道发布版本和调试版本之间的这种巨大差异是否正常,尤其是因为在调试中我没有任何痕迹被输出?我知道调试和发布版本之间应该存在性能差距,但肯定不会这么大吗?
【问题讨论】:
标签: debugging optimization directx release
我正在开发 DirectX 游戏,我发现在发布构建期间我的平均速度为 170 fps,但在调试版本中我获得约 20 fps。
我想知道发布版本和调试版本之间的这种巨大差异是否正常,尤其是因为在调试中我没有任何痕迹被输出?我知道调试和发布版本之间应该存在性能差距,但肯定不会这么大吗?
【问题讨论】:
标签: debugging optimization directx release
像往常一样,这取决于 (tm)。不,说真的:调试和发布性能之间的数量级差异听起来很合理。 (比其他方式更好;))
【讨论】:
调试版本通常禁用所有优化。许多库(包括 DirectX)还在调试模式下执行更多验证和详细诊断。
所以是的,完全有可能在性能上有这么大的差异。
【讨论】:
当然。调试版本具有未优化的代码,包含额外的元数据,以便可以在 pdb 文件中跟踪它们,以及各种其他 gremlins 侵蚀你的 fps。许多测试代码也仅在调试环境中执行,如果您的代码处于紧密循环中(例如视频游戏渲染场景),您会注意到这一点。
【讨论】:
是的,这是完全正常的。这种情况通常是由于使用了像普通数据类型(即支持+、-、* 等)和ASSERT 的类类型(如Matrix 和Vector)。
类类型导致速度如此缓慢的原因是因为没有代码被内联,在发布时它确实被内联。这可能会导致巨大的速度差异,令人惊讶的是。
ASSERT 是检查事物安全性的额外工作。额外的工作意味着额外的处理时间,因此事情会变慢。
正如已经提到的,缺乏优化也无济于事。虽然在某种程度上,这反映在缺乏内联(这是一种优化)。
【讨论】:
如果您想确定,总是可以选择进行一阶性能分析(使用您最喜欢的分析器)。是的,花时间优化调试版本通常不是一个好主意,但如果您发现性能与发布版本相差太远,仍然值得花一些时间。 p>
【讨论】: