Вы можете использовать класс System.Diagnostics.Stopwatch
.
Stopwatch sw = new Stopwatch();
sw.Start();
// Your method call here...
sw.Stop();
// Get the elapsed time
TimeSpan elapsed = sw.Elapsed;
Отсюда вы можете использовать свойства TimeSpan.Ticks
или TimeSpan.TotalSeconds
для определения прошедших тиков или прошедших секунд соответственно.
Если вы хотите, вы можете использовать метод в следующих строках, чтобы «обернуть» эту функциональность вокруг функции, как вы упомянули (просто идея, вы, вероятно, захотите настроить этот код в соответствии со своими конкретными целями - - передача аргументов и т. д.):
public static T ExecuteWithElapsedTime<T>(Func<T> function, out TimeSpan elapsedTime)
{
T rval;
Stopwatch sw = new Stopwatch();
sw.Start();
rval = function();
sw.Stop();
elapsedTime = sw.Elapsed;
return rval;
}
И вы можете назвать это так (где myFunc
- это функция, которая возвращает int
):
TimeSpan elapsed;
int result = ExecuteWithElapsedTime(myFunc, out elapsed);
Может быть проще, хотя бы не беспокоиться о таком методе, а просто поместить код секундомера в линию при вызове метода.