web-dev-qa-db-ja.com

ElapsedTicks、ElapsedMilliseconds、Elapsed.Milliseconds、およびElapsed.TotalMillisecondsの違いは? (C#)

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

機能があります

    {
        Stopwatch sw = new Stopwatch();

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

        sw.//what?
    }

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

編集:私はmsdnのドキュメントを試しましたが、詳細はありません。

38
nawfal

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プロパティが提供できる精度に欠ける場合があります。

ElapsedMillisecondsがInt64の場合、Elapsed.TotalMillisecondsは、実行時間を部分的なミリ秒に戻すことができるdoubleです。例えばこのプロパティでは、0.0007ミリ秒のストップウォッチは0を返し、1234.56ミリ秒は1234を返します。したがって、精度を確保するには、常にElapsed.TotalMillisecondsを使用します。

説明については、MSDNの Stopwatch.ElapsedMilliseconds を参照してください。

宜しくお願いします、

51
Dr. ABT

ストップウォッチクラスを反映すると、ElapsedMillisecondsはElapsed ticksがミリ秒に変換(および丸め)されていることがわかります。

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

public long ElapsedMilliseconds
{
  get
  {
    return this.GetElapsedDateTimeTicks() / 10000L;
  }
}
7
granaker

msdn からの短い説明:

ElapsedMilliseconds

このプロパティは、経過時間を最も近いミリ秒単位に切り捨てて表します。より精度の高い測定には、ElapsedまたはElapsedTicksプロパティを使用します。

ElapsedTicks

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

Elapsed

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

4
Gustavo F

ElapsedTimeSpanです。時間を表示したい場合は、Elapsed.ToString()だけで表示できます

1
Reniuz