为什么.NET的计时器(Stopwatch)中ElapsedTicks * 10,000不等于ElapsedMilliseconds?

7
我正在尝试对一些代码进行性能测试,使用了秒表。当我输出毫秒数时,总是显示为0,所以我尝试使用计时器的“tick”数。我发现“tick”数大约为20,000到30,000。查看MSDN中TimeSpan.TicksPerMillisecond,它表示每毫秒10,000个“tick”。那么为什么我的秒表经过的时间不是2或3毫秒呢?我错过了什么吗?我甚至在同一行上输出结果,但得到的结果仍然是0。
Time taken: 26856 ticks, 0 ms

而且它是恒定的。

这是我在循环中运行的代码。我意识到每次都会创建一个新的秒表,这不是很高效,但我不认为它会影响我的结果。

Dim SW = New Stopwatch()
SW.Reset()
SW.Start()
MethodCall()
SW.Stop()
Console.WriteLine(String.Format("Time to increase counters: {0} ticks, {1} ms", SW.ElapsedTicks, SW.ElapsedMilliseconds))

也许你可以发布一个完整的可工作示例? - Mark Byers
1
请发布您的实际代码,而不仅仅是描述和输出。 - Adam Robinson
嘿,我也遇到了同样的问题,不知道为什么。。你找到任何解决办法了吗? - nicolas
这个回答解决了你的问题吗?Stopwatch.ElapsedTicks和Stopwatch.Elapsed.Ticks始终相同吗? - Wai Ha Lee
@WaiHaLee,Joe提供的答案回答了我的问题。这就是我点击接受他的回答的原因。 - uriDium
2个回答

10

Stopwatch的滴答声与DateTime的滴答声是不同的。

Stopwatch的一个滴答声取决于其频率(一个滴答声等于一秒钟除以频率,如MSDN文档中对Stopwatch.ElapsedTicks的描述所述)。

可以认为Stopwatch.ElapsedTicks作为属性名称不够准确,可能会与DateTime的ticks搞混。我更喜欢使用ElapsedRawTicks或其他适当的形容词来表示这些不是标准的ticks。


哦,我是使用 TimeSpan.TicksPerMillisecond 的。感谢提供链接。 - uriDium

0

确保你实际上正在启动一个Stopwatch,并且你正在使用Stopwatch.ElapsedMillisecondsStopwatch.Elapsed.TotalMilliseconds


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接