7

こんにちは、C# で TimesSpan を使用してマイクロセンコードを出力できるかどうか、もう一度質問します。

私は次の例を持っています:

DateTime startTime = DateTime.Now;
..../some code
DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);
Label3.Text=(totalTimeTaken.Milliseconds).ToString();

このコードではミリ秒単位で表示できますが、マイクロ秒を表示する必要があります。マイクロ秒に変更する方法はありますか、それとも何か他のものを使用する必要がありますか?

私の質問を編集する必要があります: 私の目標は、2 つの DateTime の間に費やされた時間を測定することです。これは、ミリ秒ではカットできないコード行が非常に少ないためです。これが、マイクロ秒が必要な理由です。

4

4 に答える 4

10

あなたが見つける最高の解像度は、ストップウォッチクラスを介したものになります。CPUが高解像度タイマーをサポートしている場合、Stopwatchクラスはそれを使用します。IsHighResolutionおよび/またはFrequencyプロパティを介してこれを確認できます。

これは、パフォーマンス測定に使用する必要があるクラスであり、ではありませんDateTime

編集:私はちょうどDateTimeについて何か新しいことを学びました。ドキュメントから..。

時間値はティックと呼ばれる100ナノ秒単位で測定され、特定の日付は、GregorianCalendarカレンダーの西暦0001年1月1日深夜12時以降のティック数です(うるう秒で追加されるティックを除く)。 。たとえば、ティック値31241376000000000Lは、1月1日金曜日の010012:00:00深夜の日付を表します。DateTime値は、常に明示的またはデフォルトのカレンダーのコンテキストで表されます。

ただし、の解像度DateTime.Nowまだ約15ミリ秒であるため、機能しません(これにより、ドキュメントはせいぜい誤解を招く可能性があります...)ストップウォッチを使用してください。

于 2012-07-18T18:17:04.567 に答える
1

DateTimeクラスを使用できます。DateTimeには、Ticksというプロパティがあります。

DateTime.Ticks

リンクから:

「1ティックは100ナノ秒または1000万分の1秒を表します。1ミリ秒には10,000ティックがあります。

このプロパティの値は、DateTime.MinValueを表す0001年1月1日午前0時00分から経過した100ナノ秒間隔の数を表します。うるう秒に起因するティック数は含まれていません。」

DateTime dt1 = DateTime.Now;
// do stuff here...
DateTime dt2 = DateTime.Now;

long nanoseconds = (dt2.Ticks - dt1.Ticks) * 100;
于 2012-07-18T18:18:21.620 に答える
1

他の人は、 two を減算したときに期待できる精度について良いことを書いていますDateTime.Now。しかし、もう 1 つ重要な点があります。totalTimeTaken.TotalMillisecondsではなく totalTimeTaken.Millisecondsを使用してください。一般に、数値には小数点以下 4 桁があります。

マイクロ秒を取得するには、単純に1000.0 * totalTimeTaken.TotalMilliseconds. 一般に、小数点の後に 1 つの小数点があります。ただし、繰り返しますが、通常のハードウェアと実装では、これらすべての数字が信頼できるわけではありません。

于 2012-07-18T19:44:07.497 に答える
1

高レベルの精度が必要な場合は、System.Diagnostics.Stopwatchを使用します。

コードサンプルから、何かの時間を計ろうとしているように見える場合。DateTimeそのための貧弱な構造です。詳細については、Eric Lippert の記事「Precision and Accuracy of DateTime」を参照してください。

さて、「開始から終了までどのくらいの時間が経過しましたか?」という質問です。「今何時?」とは全く別の質問です。ある操作にかかった時間について質問したい場合で、高精度で正確な回答が必要な場合は、StopWatch クラスを使用します。それは本当にナノ秒の精度とその精度に近い精度を持っています.

于 2012-07-18T18:14:34.747 に答える