怎样才能最准确地看到某个东西(例如一个方法调用)在代码中花费了多长时间?

我猜最简单和最快的方法是:

DateTime start = DateTime.Now;
{
    // Do some work
}
TimeSpan timeItTook = DateTime.Now - start;

但这有多精确呢?有没有更好的办法?


当前回答

正如其他人所说,秒表是一个很好的课程使用这里。你可以用一个有用的方法来包装它:

public static TimeSpan Time(Action action)
{
    Stopwatch stopwatch = Stopwatch.StartNew();
    action();
    stopwatch.Stop();
    return stopwatch.Elapsed;
}

(注意Stopwatch.StartNew()的使用。我更喜欢这样创建一个秒表,然后调用Start()在简单性方面。)显然,这会引起调用委托的冲击,但在绝大多数情况下,这是无关紧要的。你可以这样写:

TimeSpan time = StopwatchUtil.Time(() =>
{
    // Do some work
});

你甚至可以为此制作一个ITimer接口,在可用的地方使用StopwatchTimer, CpuTimer等实现。

其他回答

更好的方法是使用Stopwatch类:

using System.Diagnostics;
// ...

Stopwatch sw = new Stopwatch();

sw.Start();

// ...

sw.Stop();

Console.WriteLine("Elapsed={0}",sw.Elapsed);

使用Stopwatch类

正如其他人所说,秒表是一个很好的课程使用这里。你可以用一个有用的方法来包装它:

public static TimeSpan Time(Action action)
{
    Stopwatch stopwatch = Stopwatch.StartNew();
    action();
    stopwatch.Stop();
    return stopwatch.Elapsed;
}

(注意Stopwatch.StartNew()的使用。我更喜欢这样创建一个秒表,然后调用Start()在简单性方面。)显然,这会引起调用委托的冲击,但在绝大多数情况下,这是无关紧要的。你可以这样写:

TimeSpan time = StopwatchUtil.Time(() =>
{
    // Do some work
});

你甚至可以为此制作一个ITimer接口,在可用的地方使用StopwatchTimer, CpuTimer等实现。

stopwatch就是为这个任务设计的。

秒表是好的,但循环工作10^6次,然后除以10^6。 你会得到更精确的结果。