阅读完这些问题后:
Code is behaving differently in Release vs Debug Mode
C# - Inconsistent math operation result on 32-bit and 64-bit
Double precision problems on .NET
Why does this floating-point calculation give different results on different machines?
我怀疑我的方法确定FPS在调试模式下工作但不再适用于发布模式的原因是因为我使用Long来保存时间值。这是相关的代码:
public void ActualFPS()
{
if (Stopwatch.GetTimestamp() >= lastTicks + Stopwatch.Frequency)
{
actualFPS = runsThisSecond;
lastTicks = Stopwatch.GetTimestamp();
runsThisSecond = 0;
}
}
每次调用I跟踪方法时,runsThisSecond都会加1。虽然这不是一种确定FPS的过于准确的方法,但它可以满足我的需要。
lastTicks是Long类型的变量,我相信Stopwatch.GetTimestamp()也会返回Long(?)。这是我的问题吗?如果是的话:关于如何解决这个问题的任何建议?
编辑:秒表 使用高分辨率计时器。
EDIT2:问题已经解决了。没有对我的任何代码进行任何更改。完全没有。没有。我不知道是什么导致它破裂或修复自己。也许我的电脑决定自发地考虑我的感受?
答案 0 :(得分:3)
您可以使用非常准确的间隔测量(gettimestamp - lastticks),但您并未使用它来计算帧速率。你假设间隔是秒,它不会。根据您调用ActualFPS()的频率来确定随机数量。在发布模式下,您将更频繁地调用ActualFPS(),因此错误较少。
将runsThisSecond除以(gettimestamp - lastticks)转换为秒。