tiempo sirve reloj regresiva que para form ejemplo cuenta cronometro contador consola con c#

c# - sirve - ¿Cómo se convierten las marcas del cronómetro en nanosegundos, milisegundos y segundos?



stopwatch c# (7)

De acuerdo con MSDN , Frequency le informa la cantidad de tics por segundo. Por lo tanto:

Stopwatch sw = new Stopwatch(); // ... double ticks = sw.ElapsedTicks; double seconds = ticks / Stopwatch.Frequency; double milliseconds = (ticks / Stopwatch.Frequency) * 1000; double nanoseconds = (ticks / Stopwatch.Frequency) * 1000000000;

Esta es una pregunta muy básica ... bastante embarazosa, pero aquí va:

Tengo un bloque de Cronómetro en el código C #. Determino el tiempo transcurrido en tics y luego quiero convertir a ns, ms, s. Sé que la Frecuencia es proporcionada por la clase Cronómetro y que es necesaria para la conversión.

Gracias


Desde los documentos de MSDN :

Utilice los campos MSDN e IsHighResolution para determinar la precisión y la resolución de la implementación del tiempo del cronómetro.

long frequency = Stopwatch.Frequency; Console.WriteLine(" Timer frequency in ticks per second = {0}", frequency); long nanosecPerTick = (1000L*1000L*1000L) / frequency; Console.WriteLine(" Timer is accurate within {0} nanoseconds", nanosecPerTick);


Si obtienes el tiempo transcurrido desde el cronómetro, hay propiedades del objeto de intervalo de tiempo para obtener el segundo, molino o lo que sea.

TimeSpan ts = stopWatch.Elapsed; int seconds = ts.FromSeconds; int mill = ts.FromMiliseconds;


Use esta clase:

public static class Utility { public static long ElapsedNanoSeconds(this Stopwatch watch) { return watch.ElapsedTicks * 1000000000 / Stopwatch.Frequency; } public static long ElapsedMicroSeconds(this Stopwatch watch) { return watch.ElapsedTicks * 1000000 / Stopwatch.Frequency; } }

Luego puede obtener los nanosegundos / microsegundos transcurridos de la siguiente manera:

var stopwatch = Stopwatch.StartNew(); //... measured code part Console.WriteLine(stopwatch.ElapsedNanoSeconds()); // OR Console.WriteLine(stopwatch.ElapsedMicroSeconds());

Durante milisegundos, puede utilizar el método ElapsedMilliseconds () de Cronómetro.


Use la propiedad Elapsed :

stopwatch.Elapsed.TotalMilliseconds


MSDN frecuencia te da tics / segundo.

Entonces, si tiene garrapatas, puede dividir por frecuencia para obtener segundos:

long ticks = sw.ElapsedTicks; double ns = 1000000000.0 * (double)ticks / Stopwatch.Frequency; double ms = ns / 1000000.0; double s = ms / 1000;

Por ejemplo, puedes hacer:

static void Main() { Stopwatch sw = new Stopwatch(); sw.Start(); System.Threading.Thread.Sleep(3456); sw.Stop(); long ticks = sw.ElapsedTicks; double ns = 1000000000.0 * (double)ticks / Stopwatch.Frequency; double ms = ns / 1000000.0; double s = ms / 1000; Console.WriteLine("{0}, {1}, {2}", ns, ms, s); Console.ReadKey(); }

Que, en mi sistema, imprime:

3455650175.58075, 3455.65017558075, 3.45565017558075


Stopwatch.Elapsed es un TimeSpan , por lo que puede hacer myStopwatch.Elapsed.TotalMilliseconds , myStopwatch.Elapsed.TotalSeconds , etc.

// Create new stopwatch Stopwatch stopwatch = new Stopwatch(); // Begin timing stopwatch.Start(); // Do something for (int i = 0; i < 1000; i++) { Thread.Sleep(1); } // Stop timing stopwatch.Stop(); // Write result Console.WriteLine("Time elapsed (s): {0}", stopwatch.Elapsed.TotalSeconds); Console.WriteLine("Time elapsed (ms): {0}", stopwatch.Elapsed.TotalMilliseconds); Console.WriteLine("Time elapsed (ns): {0}", stopwatch.Elapsed.TotalMilliseconds * 1000000);

Salida:

Time elapsed (s): 2.4976622 Time elapsed (ms): 2497.6622 Time elapsed (ns): 2497662200

Tenga en cuenta que stopwatch.ElapsedMilliseconds devuelve un valor long y, por lo tanto, solo es preciso hasta el milisegundo, mientras que el stopwatch.Elapsed.TotalMilliseconds devuelve un double y tiene la misma precisión que stopwatch.ElapsedTicks , excepto que es más fácil de usar. ILSpy muestra que TimeSpan.TotalMilliseconds se calcula utilizando ticks de todos modos.