我正在开发DirectX游戏,我发现在发布版本中我平均得到170fps,但是在调试版本中我得到了~20fps。
我想知道发布版本和调试版本之间的这种巨大差异是否正常,特别是因为在调试中我没有任何痕迹出来?我知道调试和发布版本之间应该存在性能差距,这肯定不是很大吗?
答案 0 :(得分:3)
像往常一样,它取决于(tm)。不,严重:调试和发布性能之间的一个数量级差异听起来足够合理。 (比其他方式更好;))
答案 1 :(得分:3)
调试版本通常会禁用所有优化。许多库(包括DirectX)也在调试模式下执行更多验证和详细诊断。
所以是的,完全有可能在性能上有这么大的差异。
答案 2 :(得分:3)
自然。调试版本具有未经优化的代码,包含额外的元数据,以便可以在pdb文件中跟踪它们,以及各种其他的gremlin会破坏你的fps。许多测试代码也只在调试环境中执行,如果您的代码处于紧密循环中(例如视频游戏渲染场景),您会注意到这一点。
答案 3 :(得分:2)
是的,这完全正常。这种情况通常是由像Matrix和Vector这样的类类型的使用引起的,这些类型的行为类似于普通数据类型(即支持+, - ,*等)和ASSERT。
类类型导致这种速度变慢的原因是因为没有任何代码被内联,因为它在内存中会被内联。这可能导致巨大的速度差异,令人惊讶的是。
ASSERT是检查事物安全性的额外工作。额外的工作意味着额外的处理时间,因此事情变慢。
正如已经知道的那样,缺乏优化也无济于事。虽然在某种程度上,这反映在缺乏内联(这是一种优化)。
答案 4 :(得分:0)
如果您想确切知道,总是可以选择进行一阶性能分析(使用您最喜欢的探查器)。是的,花时间优化调试版本通常不是一个好主意,但是如果你发现性能离发布版本太远,那么花费一些时间仍然是值得的。