C#Debug和Release .exe因Long而表现不同?

时间:2011-03-06 05:35:00

标签: c# .net compiler-construction

阅读完这些问题后:

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:问题已经解决了。没有对我的任何代码进行任何更改。完全没有。没有。我不知道是什么导致它破裂或修复自己。也许我的电脑决定自发地考虑我的感受?

1 个答案:

答案 0 :(得分:3)

您可以使用非常准确的间隔测量(gettimestamp - lastticks),但您并未使用它来计算帧速率。你假设间隔是秒,它不会。根据您调用ActualFPS()的频率来确定随机数量。在发布模式下,您将更频繁地调用ActualFPS(),因此错误较少。

将runsThisSecond除以(gettimestamp - lastticks)转换为秒。