Imaginemos que tenemos medidas 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?
}
Según MSDN:
En un escenario típico de Stopwatch, llama al método Start, luego llama al método Stop , y luego verifica el tiempo transcurrido usando la propiedad Elapsed.
No estoy seguro de si debería llamar a este método cuando ya no estoy interesado en la instancia del temporizador. ¿Debo "aclarar" usando el Stop
método?
EDITAR
Tenga en cuenta que Logger.Log (..) no cuesta nada porque timer.Elapsed
se lee antes de que el registrador registre.
Stop
método evita que cometa errores por descuido, por ejemplo, si está evaluando laElapsed
propiedad varias veces.Stop
haría alguna diferencia? No puede usar el valor de todos modosRespuestas:
No, no necesitas detenerlo.
Stop()
simplemente deja de rastrear el tiempo transcurrido. No libera recursos.fuente
No, no es necesario detenerlo ni limpiarlo.
Stopwatch
no utiliza ningún recurso no administrado (si lo pensóIDisposable
). En realidad, no utiliza ningún recurso (excepto la memoria utilizada por el objeto en sí, por supuesto). ¡Tampoco consume CPU mientras mide el tiempo transcurrido!En Windows implementaciones de .NET (.NET Framework completo, Mono, .NET Core), que sólo llama a la
QueryPerformanceCounter()
API de Windows cuando sea necesario (enStart()
yStop()
y al leerElapsed
) para recuperar un sello de tiempo de alta resolución.En las implementaciones de Linux de Mono y .NET Core, usa la
clock_gettime
función para recuperar un valor de tiempo creciente monótono.Para cualquiera que tenga una verdadera curiosidad sobre los detalles de implementación: lea esta publicación .
fuente
Creo que Detener es útil si desea reutilizar el valor Transcurrido.
fuente
Si su código no necesita ser calculado, entonces no necesita usar Stop ().
fuente