发布/调试版本之间的巨大帧速率差异

时间:2010-06-21 16:43:01

标签: debugging optimization directx release

我正在开发DirectX游戏,我发现在发布版本中我平均得到170fps,但是在调试版本中我得到了~20fps。

我想知道发布版本和调试版本之间的这种巨大差异是否正常,特别是因为在调试中我没有任何痕迹出来?我知道调试和发布版本之间应该存在性能差距,这肯定不是很大吗?

5 个答案:

答案 0 :(得分:3)

像往常一样,它取决于(tm)。不,严重:调试和发布性能之间的一个数量级差异听起来足够合理。 (比其他方式更好;))

答案 1 :(得分:3)

调试版本通常会禁用所有优化。许多库(包括DirectX)也在调试模式下执行更多验证和详细诊断。

所以是的,完全有可能在性能上有这么大的差异。

答案 2 :(得分:3)

自然。调试版本具有未经优化的代码,包含额外的元数据,以便可以在pdb文件中跟踪它们,以及各种其他的gremlin会破坏你的fps。许多测试代码也只在调试环境中执行,如果您的代码处于紧密循环中(例如视频游戏渲染场景),您会注意到这一点。

答案 3 :(得分:2)

是的,这完全正常。这种情况通常是由像Matrix和Vector这样的类类型的使用引起的,这些类型的行为类似于普通数据类型(即支持+, - ,*等)和ASSERT。

类类型导致这种速度变慢的原因是因为没有任何代码被内联,因为它在内存中会被内联。这可能导致巨大的速度差异,令人惊讶的是。

ASSERT是检查事物安全性的额外工作。额外的工作意味着额外的处理时间,因此事情变慢。

正如已经知道的那样,缺乏优化也无济于事。虽然在某种程度上,这反映在缺乏内联(这是一种优化)。

答案 4 :(得分:0)

如果您想确切知道,总是可以选择进行一阶性能分析(使用您最喜欢的探查器)。是的,花时间优化调试版本通常不是一个好主意,但是如果你发现性能离发布版本太远,那么花费一些时间仍然是值得的。