Я пытаюсь найти метод, который будет измерять и возвращать время выполнения другого метода. В основном что-то вроде этого:
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)?
Я только что создал такой метод для проверки производительности в этом SO-вопросе:
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);
См. ответ 280Z28, если вы не хотите тестировать более одной итерации: -)
public static TimeSpan MeasureExecTime(Action action)
{
Stopwatch stopwatch = Stopwatch.StartNew();
action();
return stopwatch.Elapsed;
}
Смотрите эту тему для долгого обсуждения этой темы, принятые ответы имеют немало недостатков.
Бенчмаркинг небольших образцов кода на С#, может ли эта реализация быть улучшена?