C# 创建一个方法以返回另一个方法的执行时间
我正试图想出一个方法来测量并返回另一个方法的执行时间。基本上是这样的:C# 创建一个方法以返回另一个方法的执行时间,c#,.net,performance,C#,.net,Performance,我正试图想出一个方法来测量并返回另一个方法的执行时间。基本上是这样的: public void DoSomething(Int32 aNumber) { /* Stuff happens */ } // // Somewhere else in code: TimeSpan executionTime = MyDiag.MeasureExecTime(DoSomething(5)); // Now executionTime contains how long DoSomething(5)
public void DoSomething(Int32 aNumber)
{ /* Stuff happens */ }
//
// Somewhere else in code:
TimeSpan executionTime = MyDiag.MeasureExecTime(DoSomething(5));
// Now executionTime contains how long DoSomething(5) took to execute,
// e.g. 2.55463 seconds.
我如何才能做到这一点(MeasureExecTime方法)?我刚刚创建了这样一种方法来测试以下方面的性能:
如果不想测试多个迭代,请参阅280Z28的答案:-)这也是我的问题。实际上,我是从你在另一个问题中的答案(包括性能测试)中得到这个想法的。lol.您的for循环增加了开销,可能会扭曲结果(虽然不是很明显…)。您应该在action()之前启动秒表,并将其暂停after@Thomas,它有一些缺陷,但在秒表开始之前采取行动并非其中之一。看我的答案。重复的?这是怎么重复杰夫关于通过lambda测量的问题的?而且,我已经接受了这个问题的答案,你手上的时间太多了?事实上,这个被接受的答案和另一个问题的被接受的答案几乎相同,这让我怀疑它是否是重复的,仅此而已。没必要对这件事大惊小怪。我可以问一下为什么吗?如果你想做一些快速的基准测试,很好;如果要分析应用程序,请使用分析程序。有一个免费的裸体版,有几个功能齐全的商业产品(ANTS、dotTrace)。
private static TimeSpan MeasureExecTime(Action action, int iterations)
{
action(); // warm up
var sw = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++)
{
action();
}
return sw.Elapsed;
}
MeasureExecTime(() => DoSomething(5), 100000);
public static TimeSpan MeasureExecTime(Action action)
{
Stopwatch stopwatch = Stopwatch.StartNew();
action();
return stopwatch.Elapsed;
}