【发布时间】:2017-01-03 21:22:16
【问题描述】:
我正在为一个应用程序实施一些诊断,在该应用程序中用户可以看到图形更新的速度,并且我遇到了一些看似奇怪的行为。我的图形更新函数是使用 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 时我有什么遗漏吗?我对此感到很困惑,因为它看起来很随机。
【问题讨论】:
-
DateTime.Now不是那么准确,如果您想测量开始和结束之间的时间,请改用Stopwatch。 -
显示时是否有可能是舍入或截断?
-
你不能只访问
(end - begin).Ticks,每个都是 100 纳秒,也就是 1e-4 毫秒。更新:这行不通,忽略 -
@abc123 他没有
DateTime做(end - begin)返回TimeSpan和TimeSpan 的TotalMilliseconds属性返回一个双。 @Richard,如果您使用刻度,您仍然会得到 0。对DateTime.Now的两次调用都返回相同的DateTime值,因为.Now不会经常更新。