在XNA / MonoGame中解锁帧率会告诉我代码的效率如何吗?


12

我一直在通过以下方式解锁MonoGame中的帧率:

this.graphics.SynchronizeWithVerticalRetrace = false;
base.IsFixedTimeStep = false;

并以此作为我更新和绘制游戏效率的基础。

240 x 160的分辨率下,除了帧计数器外,什么都没有绘制或更新,我得到的FPS值为9,00011,000 FPS。

如果我重新添加所有代码,它的速度将下降到约1,100 FPS。

这是否很好地表明我的代码显着降低了GPU的速度(10倍),我是否应该担心?该游戏将以60 FPS的速度运行,所以我离它还差得很远,但是我应该关注解锁帧速率的哪一点?

GPU:AMD FirePro W5000(FireGL V)


1
附带说明:在您的开发路径中,建议您将目标FPS保持在调试和发行状态。某些内容在发行版中可以很好地运行,但在调试时可能会像地狱般缓慢,这真的没有用:)
Vaillancourt

并不是的。其他答案很好地回答了这一问题,但主要要点是,大多数繁重的工作将由您的图形卡使用硬件加速来完成。除非您在与图形相同的线程中进行工作(您不应该这样做),否则根本没有理由使FPS受代码影响。
丹·潘特里

Answers:


30

只是粗略。

首先,FPS不是线性度量。11k FPS和9k之间的差异非常小(每帧0.0000201秒)。但是60和2060 FPS(2k FPS增量,在11k和9k之间存在相同)之间的差异为0.0161秒……更大。因此,仅仅因为大的差异可能或可能不是那么糟糕,作为性能指标就很危险。

相反,使用每帧时间更容易推断,但是即使那样,它仍然是对情况的一个非常广阔的视野。它只是告诉您游戏一帧需要多少秒。它不会告诉您原因,除非您在添加或启用一项特定功能后立即看到帧时间大幅增加。

它可以作为决定何时进行更多深度分析的基本晴雨表。使用FPS来确定您是受CPU还是GPU约束特别糟糕。GPU性能分析不像测量CPU时间(这是您的计时和FPS计算代码所在的位置)那样容易

至于什么时候应该关注……好吧,你说自己游戏的目标是60 FPS。如果您开始接近或低于此值,则可能需要开始更仔细地考虑性能问题。在那之前,我将专注于使一切正常工作,然后再担心使其变得快速


6
+1为最后一句话。在我看来,过早的性能优化是一个非常糟糕的做法(从经验来看)。
sirdank

1
c2.com/cgi/wiki?PrematureOptimization-关于该主题的推荐阅读
Machinarius

并非总是如此,如果您有一台高端计算机,并且它的速度约为80 FPS,那么在您的计算机上就足够了,但是如果您要针对低端计算机,则它们可能只能获得15 FPS,理想情况下,这是最佳选择在您要针对最低规格的机器上进行测试,但是如果失败,针对您的机器进行优化可能也会针对他们的机器进行优化。当然,如果它在您的低端计算机上运行得足够快,则没有理由花费额外的精力进行进一步的优化,尤其是存在增加错误的风险。
Programmdude

5

我不明白为什么你不能使用它!请记住,您可能需要对不同的代码进行编码,以解决固定/可变时间步长之间的差异,因此,如果计划在发布时使其固定,则需要进行调整。看到这篇文章:http : //rbwhitaker.wikidot.com/time-steps

这是否表明我的代码显着降低了GPU的速度?

也可能是CPU。我建议定期运行Visual Studio的内置探查器(或每当看到较大的帧率下降时),以在代码中找到热点。

我应该担心吗?

显然,这取决于您要定位的硬件。您需要在您愿意支持的最低最低要求计算机上测试代码。如果它在那里至少运行60,那么我就不会太在意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.