Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#调试和释放.exe的行为因长时间而不同?_C#_.net_Compiler Construction - Fatal编程技术网

C#调试和释放.exe的行为因长时间而不同?

C#调试和释放.exe的行为因长时间而不同?,c#,.net,compiler-construction,C#,.net,Compiler Construction,阅读这些问题后: 我怀疑我确定FPS的方法在调试模式下有效而在发布模式下不再有效的原因是因为我使用了长时间保存时间值。以下是相关代码: public void ActualFPS() { if (Stopwatch.GetTimestamp() >= lastTicks + Stopwatch.Frequency) { actualFPS = runsThisSecond; lastTicks

阅读这些问题后:

我怀疑我确定FPS的方法在调试模式下有效而在发布模式下不再有效的原因是因为我使用了长时间保存时间值。以下是相关代码:

public void ActualFPS()
    {
        if (Stopwatch.GetTimestamp() >= lastTicks + Stopwatch.Frequency)
        {
            actualFPS = runsThisSecond;
            lastTicks = Stopwatch.GetTimestamp();

            runsThisSecond = 0;
        }
    }
每次调用我跟踪的方法时,runsthisecond都会递增1。虽然这不是一种确定FPS的非常精确的方法,但它可以满足我的需要

lastTicks是Long类型的变量,我相信Stopwatch.GetTimestamp()也会作为Long(?)返回。这是我的问题吗?如果有:关于如何解决这一问题有何建议

编辑:秒表使用高分辨率计时器


编辑2:问题自行解决了。没有对我的任何代码进行任何更改。完全没有一个我不知道是什么原因导致它断裂或自行修复。也许我的电脑决定自发地考虑我的感受?

< P>你有一个非常精确的间隔测量可用(GETIMESTATEST-LASTICK),但是你没有使用它来计算帧速率。假设间隔是一秒,则不会是。它将更多,由您调用ActualFPS()的频率决定的随机数量决定。在发布模式下,您将更频繁地调用ActualFPS(),以减少错误


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

long是64位整数,因此不太可能溢出。但是我怀疑Stopwatch.GetTimestamp()可能使用了低分辨率计时器,这意味着它的粒度大约为10ms。您链接到的所有问题都与浮点运算有关。您的代码使用了一个
Long
(或
Int64
),它是一个整数类型。完全不同的东西,不可能是同一个问题。它使用高分辨率定时器。精确到615纳秒。@Bliz面食:我不期望有什么特别的。基本上,我每一秒钟都会触发if循环中的所有内容。值到底是什么并不重要。因为你没有说发行版的行为有什么不同,我猜你得到了0,并使用我的心理调试能力来建议你在发行模式下不增加
运行秒数
。按照我的理解,间隔定义是1秒,或者至少一秒钟内有多少滴答声。此外,我可以合理地确定,尽管发布模式运行得更快,但它不会导致每秒45帧的差异,特别是因为一切似乎都以相同的速度运行(部分是逐帧动画,这是可以测量的)。我理解你在文章中的建议,但将“(gettimestamp-lastticks)”转换为秒不需要使用秒表。Interval,你刚才建议的是随机(确定)调用ActualFPS()?