1

アルゴリズム解析や Big-Oh! の観点からコードのパフォーマンスをチェックするのは良いことですが、自分の PC でコードを実行するのにどれくらいの時間がかかるかを知りたかったのです。List を 9999count に初期化し、それらから要素を削除しました。悲しいことに、これを実行する期間は0:0:0. 結果に驚いたのは、実行のタイミングに何か問題があるに違いありません。誰かがコードの正しい時間を教えてくれますか?

        IList<int> source = new List<int>(100);
        for (int i = 0; i < 9999; i++)
        {
            source.Add(i);
        }

        TimeSpan startTime, duration;
        startTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;

        RemoveEven(ref source);
        duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(startTime);

        Console.WriteLine(duration.Milliseconds);
        Console.Read();
4

3 に答える 3

7

そこで使用するのに最も適切なものは、これに十分な精度がありませんStopwatchTimeSpan

var watch = Stopwatch.StartNew();
// something to time
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds);

ただし、最新の CPU は非常に高速であり、その間にそれらを削除できても驚かないでしょう。通常、タイミングについては、妥当な測定値を得るために操作を何度も繰り返す必要があります。

余談ですが、refinRemoveEven(ref source)はほぼ確実に不要です。

于 2012-05-30T06:33:43.377 に答える
4

.Net 2.0 ではStopwatchクラスを使用できます

IList<int> source = new List<int>(100);
for (int i = 0; i < 9999; i++)
{
    source.Add(i);
}

Stopwatch watch = new Stopwatch();

watch.Start();
RemoveEven(ref source);
//watch.ElapsedMilliseconds contains the execution time in ms
watch.Stop()
于 2012-05-30T06:35:05.507 に答える
0

以前の回答に追加:

var sw = Stopwatch.StartNew();

// instructions to time

sw.Stop();

sw.ElapsedMillisecondslong を返し、解像度は次のとおりです。

1 ミリ秒 = 1000000 ナノ秒

sw.Elapsed.TotalMillisecondsdouble を返し、 Stopwatch.Frequencyの逆数に等しい解像度を持ちます。たとえば、私のPCでは、1秒あたりのティックStopwatch.Frequencyの値があり、次の解像度が得られます。2939541sw.Elapsed.TotalMilliseconds

1/2939541 秒 = 3,401891655874165e-7 秒 = 340 ナノ秒

于 2012-05-30T12:04:22.263 に答える