【问题标题】:What are the value of Stopwatch's ticks if their duration varies?如果秒表的持续时间不同,它们的刻度值是多少?
【发布时间】:2013-12-10 18:56:45
【问题描述】:

我说的不是像吸血蜘蛛一样的疾病传播者,而是我在这里记录的那种蜱虫:

Stopwatch noLyme = new Stopwatch();
noLyme.Start();
. . .
noLyme.Stop();
MessageBox.Show(string.Format(
   "elapsed milliseconds == {0}, elapsed ticks == {1}", 
   noLyme.ElapsedMilliseconds, noLyme.ElapsedTicks));

消息框显示的是 17357 毫秒和 56411802 个滴答;这相当于每毫秒 3250.089416373797 个滴答声,或每秒大约 325 万个滴答声。

由于比率是如此奇数 (3250.089416373797:1),我假设刻度的时间长度会根据所使用的硬件或其他因素而变化。既然如此,以什么实际方式使用滴答计数?对我来说,毫秒似乎更有价值。 IOW:我为什么要关心刻度(可变时间片)?

【问题讨论】:

标签: c# profiling timing stopwatch


【解决方案1】:

来自文档(频率是秒表的另一个属性):

ElapsedTicks 值中的每个刻度代表相等的时间间隔 为 1 秒除以频率。

Stopwatch.ElapsedTicks (MSDN)

如果您需要根据硬件的具体情况进行非常精确的计时,滴答声很有用。

【讨论】:

    【解决方案2】:

    如果您想知道特定于给定机器的非常精确的性能测量,您可以使用刻度。内部硬件机制决定了从滴答声到实际时间的转换。

    【讨论】:

    • +1。毫秒对于 CPU 来说是很长的时间间隔 - 因此,如果您测量足够快的操作的性能,那么滴答声就是要走的路(如果需要,您可以存储 Frequency 以便稍后进行转换)。
    【解决方案3】:

    滴答是硬件测量时间的原始低级单位。

    这就像问“当我们可以使用整数时,位有什么用”。好吧,如果我们没有位,整数就不会存在!

    但是,刻度可能很有用。在计算滴答声时,将它们转换为毫秒是一个代价高昂的过程。准确测量时,您可以以滴答为单位计算所有内容,并在过程结束时将结果转换为秒。在比较测量值时,绝对值不一定是相关的,它可能只是感兴趣的相对差异。

    当然,在高级语言和多任务处理的今天,您会以这种方式访问​​裸机的情况并不多,但是为什么不应该通过更高级别的接口暴露原始硬件价值呢?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2012-10-25
      相关资源
      最近更新 更多