C# 减去 DateTimes 给出了不切实际的结果

C# Substracting DateTimes is giving unrealistic result

这是我的场景:

玩家将手指或鼠标放在屏幕底部的“起始位置”标记上。

计时器开始计时到 500 毫秒,如果用户在这段时间内没有抬起手指或标记,则会触发 holdTimerElapsed。

在此方法中,我们显示下一个标记,延迟 500 毫秒到 1 秒之间的任何时间(以便用户有机会看到下一个目标)。延迟后,播放音频“GO”并启动计时器。

定时器启动方法里面:

private void StartTimer()
{
    startTime = DateTime.Now;
    timer.Interval = ConfigurationService.GameConfig.MarkerTimeLimit;
    timer.AutoReset = false;
    timer.Start();
}

我们记录这些运动的 "start time"。如果用户能够在指定时间(4.5 秒)内单击弹出的下一个目标,我们将调用停止计时器方法:

private void StopTimer()
{
    stopTime = DateTime.Now;
    timer.Stop();
}

我的问题:

"Randomly" 结果:

TimeSpan time = stopTime - startTime;

减去 500 毫秒的保持时间将是不切实际的 2-5 毫秒 - 除了机器人之外的任何人都不可能移动时间。

我完全不知道为什么日期时间会如此接近,结果却如此之小。

更多代码:

private void HandleMarkerClick(ScatterCircle selectedCircle)
{
    StopTimer();
    selectedCircle.Aquired = true;
    aquiredTrainingCircles.Add(selectedCircle);
    TimeSpan time = stopTime - startTime;
    // movementTime here 'randomly' ends up as <10ms
    long movementTime = (long) time.TotalMilliseconds - ConfigurationService.GameConfig.MarkerHoldTime;  
}

我在这种情况下只处理基准移动的毫秒,它们需要相对准确,任何小于 100 毫秒的一般都是 "to fast to be real"

为了结束这个问题,我采纳了 Jon Skeet 的建议并切换到 Stopwatch class。客户端仍然有不一致的结果。

我无法重现问题,长话短说,客户端 运行 笔记本电脑上的应用程序处于省电模式,我认为这是导致不一致的原因。

从省电模式切换到高性能似乎解决了大部分问题。