【问题标题】:Why does ElapsedTicks * 10 000 not equal ElapsedMilliseconds for .NET's Stopwatch?为什么 ElapsedTicks * 10 000 不等于 .NET 秒表的 ElapsedMilliseconds?
【发布时间】:2011-03-01 18:04:23
【问题描述】:

我正在尝试对一些代码进行性能测试。我正在使用秒表。当我输出毫秒数时,它总是告诉我 0,所以我想我会尝试滴答数。我看到滴答声的数量约为 20 000 到 30 000。在 TimeSpan.TicksPerMillisecond 上查看 MSDN,它说每毫秒 10 000 个滴答声。在这种情况下,为什么我的秒表上经过的毫秒数没有显示为 2 或 3?

我错过了什么?我什至在同一行输出了结果。这就是我得到的。

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))

【问题讨论】:

  • 也许您可以发布一个完整的工作示例?
  • 请发布您的实际代码,而不仅仅是对其和输出的描述。
  • 嘿,有同样的铅,不知道为什么..你找到什么了吗?
  • @WaiHaLee Joe 提供的答案回答了我的问题。这就是为什么我点击接受他的回答。

标签: .net performance


【解决方案1】:

Stopwatch 刻度与 DateTime 刻度不同。

Stopwatch 滴答的长度取决于秒表频率(一个滴答等于一秒除以频率,如the MSDN documentation for Stopwatch.ElapsedTicks 中所述。

可能会争辩说,Stopwatch.ElapsedTicks 是一个糟糕的选择此属性的名称,因为它可能与 DateTime 刻度混淆。我更喜欢 ElapsedRawTicks 之类的东西,或其他一些合适的形容词限定词来暗示这些不是标准的 Ticks。

【讨论】:

  • 哦,我使用的是 TimeSpan.TicksPerMillisecond。感谢您的链接。
【解决方案2】:

确保您实际上是在启动Stopwatch,并且您使用的是Stopwatch.ElapsedMillisecondsStopwatch.Elapsed.TotalMilliseconds

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 2012-02-12
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2014-01-08
    • 2015-04-28
    相关资源
    最近更新 更多