可能的重复: 如何测量一个函数运行了多长时间?

我有一个I/O时间的方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的方法是什么?的线程吗?计时器吗?秒表吗?还有其他解决方案吗?我想要最精确的,尽可能简短的。


当前回答

秒表将使用高分辨率计数器

秒表测量流逝的时间计数计时器滴答滴答 底层计时器机制。如果硬件已安装并运行正常 系统支持高分辨率的性能计数器 Stopwatch类使用该计数器来测量经过的时间。否则, Stopwatch类使用系统计时器来测量经过的时间。使用 Frequency和IsHighResolution字段来确定精度 以及秒表计时实现的决议。

如果你正在测量IO,那么你的数据可能会受到外部事件的影响,我担心re.精确性(正如你上面所指出的)。相反,我会进行一系列测量,并考虑这些数字的平均值和分布。

其他回答

下面是微软文档:

using System;
using System.Diagnostics;
using System.Threading;
class Program
{
    static void Main(string[] args)
    {
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();
        Thread.Sleep(10000);
        stopWatch.Stop();
        // Get the elapsed time as a TimeSpan value.
        TimeSpan ts = stopWatch.Elapsed;

        // Format and display the TimeSpan value.
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,
            ts.Milliseconds / 10);
        Console.WriteLine("RunTime " + elapsedTime);
    }
}

输出: 运行时00:00:09.94

 using System.Diagnostics;
 class Program
 {
    static void Test1()
    {
        for (int i = 1; i <= 100; i++)
        {
            Console.WriteLine("Test1 " + i);
        }
    }
  static void Main(string[] args)
    {

        Stopwatch sw = new Stopwatch();
        sw.Start();
        Test1();
        sw.Stop();
        Console.WriteLine("Time Taken-->{0}",sw.ElapsedMilliseconds);
   }
 }

秒表将使用高分辨率计数器

秒表测量流逝的时间计数计时器滴答滴答 底层计时器机制。如果硬件已安装并运行正常 系统支持高分辨率的性能计数器 Stopwatch类使用该计数器来测量经过的时间。否则, Stopwatch类使用系统计时器来测量经过的时间。使用 Frequency和IsHighResolution字段来确定精度 以及秒表计时实现的决议。

如果你正在测量IO,那么你的数据可能会受到外部事件的影响,我担心re.精确性(正如你上面所指出的)。相反,我会进行一系列测量,并考虑这些数字的平均值和分布。

您还可以使用这个,“获取自系统启动以来经过的毫秒数”。

System.Environment.TickCount

例如

static void method1()
{
    for (int i = 1; i <= 100; i++)
    {
        Console.WriteLine("Test1 " + i);
    }
}
static void Main(string[] args)
{
    var startTime = Environment.TickCount;
    method1();
    var endTime = Environment.TickCount;
    Console.WriteLine("RunTime " + (endTime - startTime));
}

秒表就是为此目的而设计的,它是测量。net中时间执行的最佳方法之一。

var watch = System.Diagnostics.Stopwatch.StartNew();
// the code that you want to measure comes here
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;

在。net中不要使用DateTime来度量时间执行。


更新:

正如@series0ne在评论部分指出的那样:如果你想真正精确地测量某些代码的执行情况,你就必须使用操作系统内置的性能计数器。下面的答案包含了一个很好的概述。