ElapsedTicks,ElapsedMilliseconds,Elapsed.Milliseconds和Elapsed.TotalMilliseconds之间的区别?(C#)

naw*_*fal 38 c# performance system.diagnostics stopwatch .net-4.0

我在这些之间完全感到困惑4.ElapsedMilliseconds(long),ElapsedTicks(long),Elapsed.TotalMilliseconds(double)和Elapsed.Milliseconds(int)之间有什么区别?

我有一个功能

    {
        Stopwatch sw = new Stopwatch();

        sw.Start();
        MyTimeConsumingAction();
        sw.Stop();

        sw.//what?
    }
Run Code Online (Sandbox Code Playgroud)

如何从秒表对象的已用属性(以毫秒为单位)获取长时间运行的进程所消耗的正确时间?

编辑:我试过msdn文档,但它没有详细说明..

Dr.*_*ABT 51

Elapsed.TotalMilliseconds(double)返回自启动以来经过的整数和小数毫秒的总数

例如,在1.23456秒停止的秒表将在此属性中返回1234.56.请参阅MSDN上的TimeSpan.TotalMilliseconds

Elapsed.Milliseconds(int)返回当前秒的整数毫秒数

例如,1.234秒的秒表将在此属性中返回234.请参阅TimeSpan.Milliseconds

ElapsedTicks(long)返回秒表开始后的刻度.

在原始问题的上下文中,与秒表类有关,ElapsedTicks是经过的刻度数.刻度以Stopwatch.Frequency的速率发生,因此,为了计算经过的秒数,计算:numSeconds = stopwatch.ElapsedTicks/Stopwatch.Frequency.

旧答案将滴答定义为100纳秒周期的数量,这在DateTime类的上下文中是正确的,但在Stopwatch类的上下文中不正确.请参阅 MSDN上的Stopwatch.ElapsedTicks.

ElapsedMilliseconds返回一个舍入的数字到最接近的完整毫秒,因此这可能缺少Elapsed.TotalMilliseconds属性可以给出的精度.

Elapsed.TotalMilliseconds是一个double,它可以将执行时间返回到部分毫秒,而ElapsedMilliseconds是Int64.例如,0.0007毫秒的秒表将返回0,或者1234.56毫秒将在此属性中返回1234.因此,对于精度始终使用Elapsed.TotalMilliseconds.

有关说明,请参阅MSDN上的Stopwatch.ElapsedMilliseconds.

最好的祝福,

  • 在问题中使用`sw`,请注意:`sw.ElapsedTicks`给出了硬件相关单位`Stopwatch.Frequency`中的滴答声数量,就像您说的那样。但是,`sw.Elapsed.Ticks`(请注意额外的点!)给出了以100纳秒为单位的计算出的滴答数,由常数`TimeSpan.TicksPerSecond`隐含,其值为常数10,000,000。 (2认同)

小智 7

反映秒表类显示ElapsedMilliseconds是经过时间刻度转换(和舍入)到毫秒:

public TimeSpan Elapsed
{
  get
  {
    return new TimeSpan(this.GetElapsedDateTimeTicks());
  }
}

public long ElapsedMilliseconds
{
  get
  {
    return this.GetElapsedDateTimeTicks() / 10000L;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 根据OP的要求,这是对经过的毫秒的正确引用。接受的答案未使用秒表类“ ElapsedMilliseconds”,这可能会造成混淆,因为链接的文字描​​述不正确-现在已修复 (2认同)

小智 5

msdn的简短解释:

ElapsedMilliseconds
Run Code Online (Sandbox Code Playgroud)

此属性表示经过的时间向下舍入到最接近的整数毫秒值。对于更高精度的测量,请使用 Elapsed 或 ElapsedTicks 属性。

ElapsedTicks
Run Code Online (Sandbox Code Playgroud)

该属性表示底层计时器机制中经过的滴答数。滴答声是秒表计时器可以测量的最小时间单位。使用Frequency 字段将ElapsedTicks 值转换为秒数。

Elapsed
Run Code Online (Sandbox Code Playgroud)

使用 Elapsed 属性可通过 TimeSpan 方法和属性检索经过的时间值。例如,您可以将返回的 TimeSpan 实例格式化为文本表示形式,或将其传递给需要 TimeSpan 参数的另一个类。