Создайте метод для возврата времени выполнения другого метода

2

Я пытаюсь найти метод, который будет измерять и возвращать время выполнения другого метода. В основном что-то вроде этого:

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)?

  • 1
    Дубликат stackoverflow.com/questions/232848/… ?
  • 0
    Как это дублирует вопрос Джеффа об измерении через лямбду? И кроме того, я уже принял ответ на этот вопрос, слишком много времени у вас на руках?
Показать ещё 2 комментария
Теги:
performance

4 ответа

6
Лучший ответ

Я только что создал такой метод для проверки производительности в этом 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, если вы не хотите тестировать более одной итерации: -)

  • 0
    Это тоже был мой вопрос. На самом деле у меня появилась идея написать это из вашего ответа (с тестами производительности) в другом вопросе. лол.
  • 0
    Ваш цикл for добавляет накладные расходы и может исказить результаты (хотя и незначительно ...). Вы должны запустить секундомер перед действием () и приостановить его после
Показать ещё 1 комментарий
7
public static TimeSpan MeasureExecTime(Action action)
{
    Stopwatch stopwatch = Stopwatch.StartNew();
    action();
    return stopwatch.Elapsed;
}
  • 0
    Так же хорошо :) +1
1

Смотрите эту тему для долгого обсуждения этой темы, принятые ответы имеют немало недостатков.

Бенчмаркинг небольших образцов кода на С#, может ли эта реализация быть улучшена?

  • 1
    Мой (не принятый ответ) не пытается быть точным средним измерением. Для измерения ровно одного звонка это просто отлично. :)
0

Ещё вопросы

Сообщество Overcoder
Наверх
Меню