Quiero saber cuánto tiempo tarda un procedimiento / función / orden en finalizar, con fines de prueba.
Esto es lo que hice, pero mi método es incorrecto porque si la diferencia de segundos es 0, no puedo devolver los milisegundos transcurridos:
Observe que el valor de suspensión es de 500 ms, por lo que los segundos transcurridos son 0 y luego no pueden devolver milisegundos.
Dim Execution_Start As System.DateTime = System.DateTime.Now
Threading.Thread.Sleep(500)
Dim Execution_End As System.DateTime = System.DateTime.Now
MsgBox(String.Format("H:{0} M:{1} S:{2} MS:{3}", _
DateDiff(DateInterval.Hour, Execution_Start, Execution_End), _
DateDiff(DateInterval.Minute, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End) * 60))
¿Alguien puede mostrarme una mejor manera de hacer esto? ¿Quizás con un TimeSpan
?
La solución:
Dim Execution_Start As New Stopwatch
Execution_Start.Start()
Threading.Thread.Sleep(500)
MessageBox.Show("H:" & Execution_Start.Elapsed.Hours & vbNewLine & _
"M:" & Execution_Start.Elapsed.Minutes & vbNewLine & _
"S:" & Execution_Start.Elapsed.Seconds & vbNewLine & _
"MS:" & Execution_Start.Elapsed.Milliseconds & vbNewLine, _
"Code execution time", MessageBoxButtons.OK, MessageBoxIcon.Information)
DateTime.Now
debido a problemas con el horario de verano y la zona horaria. Lea la publicación de mi blog sobre este mismo tema