41

我完全对这 4 个感到困惑。ElapsedMilliseconds(long)、ElapsedTicks(long)、Elapsed.TotalMilliseconds(double)和 Elapsed.Milliseconds(int)有什么区别?

我有一个功能

    {
        Stopwatch sw = new Stopwatch();

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

        sw.//what?
    }

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

编辑:我尝试了 msdn 文档,但那里没有任何详细信息..

4

4 回答 4

56

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

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

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

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

ElapsedTicks (long) 返回自秒表开始以来的刻度。

在与 Stopwatch 类有关的原始问题的上下文中,ElapsedTicks是经过的滴答数。滴答声以 的速率发生Stopwatch.Frequency,因此,要计算经过的秒数,请计算:numSeconds = stopwatch.ElapsedTicks / Stopwatch.Frequency

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

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

Elapsed.TotalMillisecondsis adouble可以将执行时间返回到部分毫秒,而ElapsedMillisecondsis Int64。例如,0.0007 毫秒的秒表将在此属性中返回 0,或者 1234.56 毫秒将返回 1234。所以为了精确总是使用Elapsed.TotalMilliseconds.

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

于 2012-01-17T12:20:56.187 回答
8

反映 Stopwatch 类表明 ElapsedMilliseconds 是 Elapsed ticks 转换(并四舍五入)为毫秒:

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

public long ElapsedMilliseconds
{
  get
  {
    return this.GetElapsedDateTimeTicks() / 10000L;
  }
}
于 2012-01-17T12:29:24.057 回答
4

msdn的简短解释中:

ElapsedMilliseconds

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

ElapsedTicks

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

Elapsed

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

于 2012-01-17T12:24:53.120 回答
1

ElapsedTimeSpan。如果你想显示时间,那么就Elapsed.ToString()应该这样做

于 2012-01-17T12:24:30.123 回答