2011-10-20 35 views
5

¿Cómo imprimo en un cuadro de texto o en la salida el tiempo que el programa se está ejecutando?Tiempo de ejecución del programa

Quiero que se muestre en un bucle for, para saber cuánto tiempo necesita cada bucle for.

+1

Tome un vistazo a este artículo: [C# Timing rendimiento de la función con la clase Cronómetro] (http://www.dijksterhuis.org/timing-function-performance-stopwatch-class/) – R0MANARMY

+0

Bueno, se establece el temporizador, ejecuta el programa, detiene el temporizador y escribe la hora en un cuadro de texto. ¡Fácil! Para ser más serio, pruebe http://msdn.microsoft.com/en-us/library/system.datetime.now.aspx y '.Subtract()' – alf

Respuesta

12

Usted podría intentar:

DateTime dt = DateTime.Now; 
for (.......) 
{ 
} 
TimeSpan ts = DateTime.Now - dt; 
textbox1.Text = ts.TotalMilliseconds.ToString(); 

o (según la MSDN) si necesita una mejor resolución

Stopwatch stopWatch = new Stopwatch(); 
stopWatch.Start(); 
for (.......) 
{ 
} 
stopWatch.Stop(); 
textbox1.Text = stopWatch.ElapsedMilliseconds.ToString(); 
+3

[MSDN] (http://msdn.microsoft.com/en-us/library/system.datetime. now.aspx) documentación específicamente informa ** en contra ** usando la clase DateTime para fines de evaluación comparativa. – R0MANARMY

+0

@ R0MANARMY: sí, tienes razón. Edité mi publicación incluyendo ambas soluciones. Gracias – Marco

+0

Puedes usar 'stopWatch.ElapsedMilliseconds' directamente y deshacerte de las conversiones TimeSpan intermedias – sll

10
var watch = System.Diagnostics.Stopwatch.StartNew(); 

for() 
{ 
// .. 
} 

watch.Stop(); 

// Format 00:00:02.0001008 
string elapsed = watch.Elapsed.ToString();  

// Milliseconds like 2000 for 2 seconds 
string elapsedMs = watch.ElapsedMilliseconds.ToString(); 

System.Diagnostics.Debug.WriteLine(elapsed); 
+0

+1 para usted, porque su respuesta fue la primera y es ¡¡correcto!! – Marco

0

algo como esto:?

DateTime start = DateTime.UtcNow; 

//... processing ... 

DateTime end = DateTime.UtcNow; 

Syste.Diagnostics.Debug.WriteLine((end - start).ToString()); 
+1

[MSDN] (http://msdn.microsoft.com/en-us/library/system.datetime.now.aspx) documentación específicamente informa ** en contra ** utilizando la clase DateTime para fines de evaluación comparativa. – R0MANARMY

+1

Seguro que sé que hay temporizadores más finos, esto es bueno si quiere ver segundos o minutos ... :) –

0

Se puede almacenar la fecha y hora actuales en el inicio de la aplicación, a continuación, crear un temporizador que dispara cada segundo. Cuando se dispara, obtienes el DateTime actual, restarlo para obtener el TimeSpan y usarlo para llenar tu cuadro de texto.

+0

¿No sería eso solo contar los segundos? – R0MANARMY

+0

Actualiza el cuadro de entrada cada segundo, no mide el intervalo de tiempo. – TJHeuvel

0

Agregue estas dos líneas: entre su bucle For o entre el código donde desea probar la velocidad de funcionamiento.

Debug.WriteLine(DateTime.Now.ToLongTimeString()); 

    --your code 

Debug.WriteLine(DateTime.Now.ToLongTimeString()); 
+0

Esto no será preciso porque no solo estará midiendo cuánto tiempo tardó en ejecutarse el código, sino cuánto tiempo tardó en convertir un DateTime en una cadena + ejecutar el código. Si el código se ejecuta en algo del orden de minutos, algunos milisegundos serán insignificantes, pero para una ejecución más corta podría marcar la diferencia. – R0MANARMY

+0

@Romanarmy, está en lo correcto, si es algo así como un proyecto nuclear crítico. Y como sabe, la mayoría de los proyectos que desarrollamos todos los días son Aplicaciones Web Nucleares. –

+0

no, pero todos hemos escrito código que se ejecuta en un ciclo cerrado, y hacerlo menos eficiente significa una experiencia de usuario deficiente porque la IU se bloquea por un segundo cada vez que un usuario hace clic en un botón. – R0MANARMY

Cuestiones relacionadas