41

これら 4 の間で完全に混乱しています。ElapsedMilliseconds (long)、ElapsedTicks (long)、Elapsed.TotalMilliseconds (double)、および Elapsed.Milliseconds (int) の違いは何ですか?

私には機能があります

    {
        Stopwatch sw = new Stopwatch();

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

        sw.//what?
    }

Stopwatch オブジェクトの経過プロパティからミリ秒単位で実行時間の長いプロセスが消費した正確な時間を取得するにはどうすればよいですか?

編集: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.TotalMillisecondsは、double実行時間を部分的なミリ秒に戻すことができるElapsedMillisecondsですInt64。たとえば、0.0007 ミリ秒のストップウォッチは 0 を返し、1234.56 ミリ秒はこのプロパティで 1234 を返します。したがって、精度のために常に使用しますElapsed.TotalMilliseconds

明確にするために、MSDN の Stopwatch.ElapsedMilliseconds を参照してください。

于 2012-01-17T12:20:56.187 に答える
8

Stopwatch クラスを反映すると、ElapsedMilliseconds がミリ秒に変換 (および丸め) された Elapsed ティックであることがわかります。

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

このプロパティは、基になるタイマー メカニズムの経過ティック数を表します。ティックは、ストップウォッチ タイマーが測定できる時間の最小単位です。Frequency フィールドを使用して、ElapsedTicks 値を秒数に変換します。

Elapsed

TimeSpan のメソッドとプロパティを使用して経過時間の値を取得するには、Elapsed プロパティを使用します。たとえば、返された TimeSpan インスタンスをテキスト表現にフォーマットしたり、TimeSpan パラメーターを必要とする別のクラスに渡したりできます。

于 2012-01-17T12:24:53.120 に答える
1

ElapsedですTimeSpan。時間を表示したい場合は、それElapsed.ToString()を行う必要があります

于 2012-01-17T12:24:30.123 に答える