C# 当时间跨度小于~0.5ms时,TimeSpan.TotalMillistics为0

C# 当时间跨度小于~0.5ms时,TimeSpan.TotalMillistics为0,c#,wpf,C#,Wpf,我正在为一个应用程序实现一些诊断,在这个应用程序中,用户可以看到图形更新的速度有多快,并且我遇到了一些看似奇怪的行为。我的图形更新函数是使用计时器调用的,如下所示: private void RefreshScreen(object sender, EventArgs e) { DateTime begin = DateTime.Now; // Do some updating... DateTime end = DateTime.Now; graphicsU

我正在为一个应用程序实现一些诊断,在这个应用程序中,用户可以看到图形更新的速度有多快,并且我遇到了一些看似奇怪的行为。我的图形更新函数是使用计时器调用的,如下所示:

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.TotalMillimes时是否缺少任何内容?我对此感到相当困惑,因为它似乎是随机的。

你应该用一个
秒表来做这件事

比如:

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
// Do something.
stopwatch.Stop();
graphicsUpdateRate  = stopwatch.ElapsedMilliseconds;
您可以在此处阅读使用秒表的原因:


您应该使用
秒表进行此操作

比如:

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
// Do something.
stopwatch.Stop();
graphicsUpdateRate  = stopwatch.ElapsedMilliseconds;
您可以在此处阅读使用秒表的原因:


DateTime。如果你想测量开始和结束之间的时间,现在的
就没有那么准确了,可以用
秒表来代替。当你显示它时,是否可能是四舍五入或截断?可能是一个双精度的,你不能直接访问
(end-begin)。每个刻度都是100纳秒,也就是1e-4毫秒。更新:这行不通,ignore@abc123他没有
DateTime
doing
(end-begin)
返回
TimeSpan
,TimeSpan的
totalmillizes
属性返回双精度@Richard,如果你使用ticks,结果仍然是0。对
DateTime.Now
的两个调用都返回相同的
DateTime
值,因为
.Now
没有经常更新。
DateTime.Now
没有那么准确,如果您想测量开始和结束之间的时间,请使用秒表。
秒表。
显示时是否可能是取整或截断?可能是两次,您不能直接访问
(结束-开始)。滴答声
每一次都是100纳秒,即1e-4毫秒。更新:这行不通,ignore@abc123他没有
DateTime
doing
(end-begin)
返回
TimeSpan
,TimeSpan的
totalmillizes
属性返回双精度@Richard,如果你使用ticks,结果仍然是0。对
DateTime.Now
的两个调用都返回相同的
DateTime
值,因为
.Now
没有那么频繁地更新。我对秒表没有任何异议,只是在实现此功能时从未听说过它。我认为它比DateTime/TimeSpan更准确?@RichardJones“现在几点”和“需要多长时间”是两个截然不同的问题。不要使用专门为一个做另一个而设计的工具(也就是说,测量两个事件之间的时间要准确得多)。虽然正确,但这个答案实际上并没有解决问题(为什么会夹紧)。当使用秒表时,结果始终为0。@RichardJones使用该属性来确定当前计时器频率下系统上150个滴答声的持续时间。我对秒表没有任何异议,只是我在实现此功能时从未听说过秒表。我认为它比DateTime/TimeSpan更准确?@RichardJones“现在几点”和“需要多长时间”是两个截然不同的问题。不要使用专门为一个做另一个而设计的工具(也就是说,测量两个事件之间的时间要准确得多)。虽然正确,但这个答案实际上并没有解决问题(为什么会夹紧)。当使用秒表时,结果始终为0。@RichardJones使用该属性来确定当前计时器频率下系统上150个时钟的持续时间。