c# - programa - Medir el tiempo de ejecución del código
stopwatch c# (6)
Puede usar este contenedor de cronómetro:
public class Benchmark : IDisposable
{
private readonly Stopwatch timer = new Stopwatch();
private readonly string benchmarkName;
public Benchmark(string benchmarkName)
{
this.benchmarkName = benchmarkName;
timer.Start();
}
public void Dispose()
{
timer.Stop();
Console.WriteLine($"{benchmarkName} {timer.Elapsed}");
}
}
Uso:
using (var bench = new Benchmark($"Insert {n} records:"))
{
... your code here
}
Salida:
Insert 10 records: 00:00:00.0617594
Para escenarios avanzados, puede usar Benchmark.It o NBench
Quiero saber cuánto tiempo tarda un procedimiento / función / orden en finalizar, para fines de prueba.
Esto es lo que hice pero mi método está equivocado porque si la diferencia de segundos es 0 no puede devolver los milisegundos transcurridos:
Observe que el valor de reposo es de 500 ms, por lo que los segundos transcurridos son 0 y, a continuación, no puede 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))
¿Puede alguien mostrarme una mejor manera de hacer esto? Tal vez 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)
Si está buscando la cantidad de tiempo que el subproceso asociado ha pasado ejecutando código dentro de la aplicación.
Puede usar la propiedad ProcessThread.UserProcessorTime
que puede obtener en el espacio de nombres System.Diagnostics
.
TimeSpan startTime= Process.GetCurrentProcess().Threads[i].UserProcessorTime; // i being your thread number, make it 0 for main
//Write your function here
TimeSpan duration = Process.GetCurrentProcess().Threads[i].UserProcessorTime.Subtract(startTime);
Console.WriteLine($"Time caluclated by CurrentProcess method: {duration.TotalSeconds}"); // This syntax works only with C# 6.0 and above
Nota: Si está utilizando varios hilos, puede calcular el tiempo de cada hilo individualmente y resumirlo para calcular la duración total.
Si usa la clase Cronómetro, puede usar el método .StartNew () para restablecer el reloj a 0. Por lo tanto, no tiene que llamar a .Reset () seguido de .Start (). Podría ser útil.
Stopwatch está diseñado para este propósito y es una de las mejores maneras de medir la ejecución del tiempo en .NET.
var watch = System.Diagnostics.Stopwatch.StartNew();
/* the code that you want to measure comes here */
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
No use DateTimes para medir la ejecución del tiempo en .NET.
Una mejor manera sería usar Stopwatch , en lugar de las diferencias DateTime
.
Proporciona un conjunto de métodos y propiedades que puede usar para medir con precisión el tiempo transcurrido.
Stopwatch stopwatch = Stopwatch.StartNew(); //creates and start the instance of Stopwatch
//your sample code
System.Threading.Thread.Sleep(500);
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);