tiempo programa net medir ejecucion como c# .net vb.net datetime timespan

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 .

Stopwatch

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);


Stopwatch mide el tiempo transcurrido.

// Create new stopwatch Stopwatch stopwatch = new Stopwatch(); // Begin timing stopwatch.Start(); Threading.Thread.Sleep(500) // Stop timing stopwatch.Stop(); Console.WriteLine("Time elapsed: {0}", stopwatch.Elapsed);

Aquí hay una DEMO .