Любой класс в C #, который может сказать мне тик часов, секунд, потребляемых функцией - PullRequest
3 голосов
/ 09 декабря 2010

Есть ли в C # класс, который может дать мне такты, секунды, потребляемые методом? Я предполагаю, что у меня есть две функции, которые обертывают эту функцию, чтобы отсчитывать время и количество тиков и секунд.

Ответы [ 4 ]

11 голосов
/ 09 декабря 2010

Вы можете использовать класс 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);

Может быть проще, хотя бы не беспокоиться о таком методе, а просто поместить код секундомера в линию при вызове метода.

3 голосов
/ 09 декабря 2010

Использование:

using System.Diagnostics;

...

var sw = Stopwatch.StartNew();
DoYaThing();
Console.WriteLine("{0} Elapsed", sw.Elapsed);
0 голосов
/ 09 декабря 2010

Вы можете проверить класс [System.TimeSpan] и обернуть его вокруг метода.

0 голосов
/ 09 декабря 2010

Таймер с высоким разрешением ...

Кроме того, iirc TimeSpan может дать вам измерение в тиках назад.

...