阅读这些问题后:C#调试和释放.exe行为不同,因为长?
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;
}
}
runsThis每次调用我正在跟踪的方法时,它都会加1。当然这并不是一个确定FPS的非常准确的方法,但它适用于我所需要的。
lastTicks是一个Long类型的变量,我相信Stopwatch.GetTimestamp()返回的也是一个Long(?)。这是我的问题吗?如果是这样的话:关于如何解决这个问题的任何建议?
编辑:秒表是使用高分辨率计时器。
编辑2:问题已经解决了。没有任何更改我的任何代码。完全一样。没有。我不知道是什么导致它突破或者自行修复。也许我的电脑决定自发地考虑我的感受?
long是一个64位int,所以它不可能溢出。不过,我怀疑Stopwatch.GetTimestamp()可能使用低分辨率计时器,这意味着它具有10ms左右的粒度。 – 2011-03-06 05:38:56
您链接的所有问题都是关于**浮点运算**。你的代码使用'Long'(或'Int64'),它是一个整数类型。完全不同的东西,不可能是同一个问题。 – 2011-03-06 05:43:15
它使用高分辨率定时器。在615纳秒内准确。 – Bloodyaugust 2011-03-06 05:47:14