当TimeSpan小于~0.5ms时,TimeSpan.TotalMilliseconds为0

时间:2017-01-03 21:22:17

标签: c# wpf

我正在为应用程序实现一些诊断,用户可以看到图形更新的速度,我遇到了一些看似奇怪的行为。我的图形更新功能是使用Timer调用的,它看起来像这样:

private void RefreshScreen(object sender, EventArgs e)
{
    DateTime begin = DateTime.Now;

    // Do some updating...

    DateTime end = DateTime.Now;
    graphicsUpdateRate = (end - begin).TotalMilliseconds;
}

当我稍后在另一个函数中将graphicsUpdateRate显示到一个单独的窗口时,它几乎总是为0.偶尔它实际上会是~0.5,但我从未在低于0.48的情况下看到它。有什么理由为什么如果它低于这个会将它钳制到0?使用TimeSpan.TotalMilliseconds时有什么我想念的吗?我很困惑,因为它似乎是随机的。

1 个答案:

答案 0 :(得分:5)

您应该使用StopWatch

类似的东西:

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
// Do something.
stopwatch.Stop();
graphicsUpdateRate  = stopwatch.ElapsedMilliseconds;

您可以在此处阅读有关使用StopWatch的原因:

Is DateTime.Now the best way to measure a function's performance?