36

C#で記述されたコードシーケンスの実行時間を計る必要があります。DateTime.Nowを使用すると、ミリ秒フィールドの値が正しくなくなります。例えば:

 int start_time, elapsed_time;

 start_time = DateTime.Now.Millisecond;

 for(int i = 0; i < N_ITER; i++) {
       // cpu intensive sequence
 }

 elapsed_time = DateTime.Now.Millisecond - start_time;

経過時間は負の値を示します。

経過時間の実際の値を取得するためにDateTimeを置き換えるにはどうすればよいですか?

4

7 に答える 7

99
using System.Diagnostics;

//...

var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < N_ITER; i++) {
    // cpu intensive sequence
}
stopwatch.Stop();
elapsed_time = stopwatch.ElapsedMilliseconds;
于 2012-11-27T17:38:10.957 に答える
13

コメントに基づいて編集された回答

この回答は、2 つの時間の間の合計経過ミリ秒をカウントしようとしているだけです。時間は から直接導出されDateTime.Nowます。会話によると、DateTime.Now外部の影響を受けやすいことがわかっています。したがって、最善の解決策はStopwatchクラスを使用することです。これは、(IMO)をよりよく説明し、 DateTimeNow、DateTime.Ticks、StopWatch 間のパフォーマンスについて説明するリンクです。

元の回答

それをintにキャストする方法が問題です。より良いキャスティングと追加の要素が必要です:) これは、効率的なタイマーに比べて単純に見えるかもしれません。しかし、それは機能します:

DateTime startTime, endTime;
startTime = DateTime.Now;

//do your work

endTime = DateTime.Now;
Double elapsedMillisecs = ((TimeSpan)(endTime - startTime)).TotalMilliseconds;

Webにも参考文献がありますので、そちらも参考にしてください。

于 2012-11-27T17:37:20.190 に答える
6

Stopwatchクラスを探しています。高精度の時間測定を取り戻すように特別に設計されています。

var stopwatch = new Stopwatch();

stopwatch.Start();
for (int i = 0; i < N_ITER; i++)
{
     // cpu intensive sequence
}
stopwatch.Stop();

var elapsed = stopwatch.ElapsedMilliseconds;
于 2012-11-27T17:37:24.040 に答える
2

DateTime.Millisecondは、0 から 999 までの秒のミリ秒の端数を返すだけです。タイミングを行うときは、残りの日時を考慮する必要があります。

ただし、これらの種類のパフォーマンス タイミングにはStopWatchクラスの使用を検討する必要があります。

于 2012-11-27T17:37:44.360 に答える
0

簡単な計算の時間を取得するために使用したものは次のとおりです。

class Program
{
    static void Main(string[] args)
    {
        Decimal p = 0.00001m;
        Decimal i = 0m;
        DateTime start = new DateTime();
        DateTime stop = new DateTime();

        for (i = p; i <= 5; i = i + p)
        {
            Console.WriteLine("result is: " + i);
            if (i==p) start = DateTime.Now;
            if (i==5) stop = DateTime.Now;
        }

        Console.WriteLine("Time to compute: " + (stop-start));

    }
}
于 2013-02-07T10:56:34.277 に答える
0

これは私のために働く:

var lapsedTime = DateTime.Now.Subtract(beginTime).TotalMilliseconds;
于 2019-04-10T05:21:00.923 に答える