Представим, что у нас есть простые измерения, используя Stopwatch
public void DoWork()
{
var timer = Stopwatch.StartNew();
// some hard work
Logger.Log("Time elapsed: {0}", timer.Elapsed);
timer.Stop(); // Do I need to call this?
}
Согласно MSDN:
В типичном сценарии секундомера вы вызываете метод Start, затем в конечном итоге вызываете метод Stop , а затем проверяете прошедшее время с помощью свойства Elapsed.
Я не уверен, следует ли мне вызывать этот метод, когда меня больше не интересует экземпляр таймера. Должен ли я "разобраться" с помощью Stop
метода?
РЕДАКТИРОВАТЬ
Имейте в виду, что Logger.Log (..) ничего не стоит, потому что timer.Elapsed
он читается до того, как регистратор регистрирует.
Stop
метод предотвращает ошибки по невнимательности, например, если вы оцениваетеElapsed
свойство несколько раз.Stop
будет иметь какое-либо значение? Вы все равно не можете использовать это значениеОтветы:
Нет, тебе не нужно останавливаться.
Stop()
просто перестает отслеживать прошедшее время. Это не освобождает ресурсы.источник
Нет, не нужно останавливать или убирать его.
Stopwatch
не использует никаких неуправляемых ресурсов (если вы подумалиIDisposable
). На самом деле он вообще не использует никаких ресурсов (кроме, конечно, памяти, используемой самим объектом)! Он также не потребляет процессор при измерении прошедшего времени!В окнах реализаций .NET (полный .NET Framework, Mono, .NET ядра), он просто вызывает
QueryPerformanceCounter()
API Windows , когда это необходимо (наStart()
иStop()
и при чтенииElapsed
) , чтобы получить штамп времени с высоким разрешением.В Linux-реализациях Mono и .NET Core он использует
clock_gettime
функцию для получения монотонно увеличивающегося значения времени.Всем, кому интересны детали реализации: прочтите этот пост .
источник
Я думаю, что Stop полезен, если вы хотите повторно использовать значение Elapsed.
источник
Если ваш код не требует вычислений, то использовать Stop () не нужно.
источник