1

尽管在算法分析和 Big-Oh! 方面检查代码的性能很好!我想看看代码在我的电脑上执行需要多少时间。我已将 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

最适合使用的东西是Stopwatch- 任何涉及的东西TimeSpan远远不够精确:

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

但是,现代 CPU 非常快,如果它能够在那个时候移除它们,我也不会感到惊讶。通常,对于计时,您需要多次重复操作才能获得合理的测量结果。

另外:几乎可以肯定不需要refin 。RemoveEven(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.ElapsedMilliseconds返回一个 long 并具有以下分辨率:

1 毫秒 = 1000000 纳秒

sw.Elapsed.TotalMilliseconds返回一个双精度值,其分辨率等于Stopwatch.Frequency的倒数。例如,在我的 PC 上,每秒Stopwatch.Frequency的刻度值为:2939541sw.Elapsed.TotalMilliseconds

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

于 2012-05-30T12:04:22.263 回答