Vamos imaginar que temos medições simples usando 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?
}
De acordo com o MSDN:
Em um cenário típico do Cronômetro, você chama o método Start e, por fim, chama o método Stop e verifica o tempo decorrido usando a propriedade Elapsed.
Não tenho certeza se devo chamar esse método quando não estou mais interessado na instância do temporizador. Devo "limpar" usando o Stop
método?
EDITAR
Lembre-se de que Logger.Log (..) não custa nada porque timer.Elapsed
é lido antes dos logs do logger.
Stop
método evita erros descuidados, por exemplo, se você estiver avaliando aElapsed
propriedade várias vezes.Stop
faria alguma diferença? Você não pode usar o valor de qualquer maneiraRespostas:
Não, você não precisa parar.
Stop()
apenas para de rastrear o tempo decorrido. Isso não libera nenhum recurso.fonte
Não, não há necessidade de parar ou limpar.
Stopwatch
não usa nenhum recurso não gerenciado (se você pensouIDisposable
). Na verdade, ele não usa nenhum recurso (exceto a memória usada pelo próprio objeto, é claro)! Também não consome CPU enquanto mede o tempo decorrido!No Windows implementações do .NET (.NET Framework completo, Mono, .NET Core), ele só chama a
QueryPerformanceCounter()
API do Windows quando necessário (onStart()
eStop()
e quando lendoElapsed
) para recuperar um carimbo de tempo de alta resolução.Em implementações Linux de Mono e .NET Core, ele usa a
clock_gettime
função para recuperar um valor de tempo crescente monotônico.Para quem realmente tem curiosidade sobre os detalhes da implementação: leia este post .
fonte
Acho que Stop é útil se você quiser reutilizar o valor Decorrido.
fonte
Se o seu código não precisa calcular, não há necessidade de usar Stop ().
fonte