Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Tiempo de ejecucion de un proceso (https://www.clubdelphi.com/foros/showthread.php?t=89611)

AgustinOrtu 26-12-2015 02:56:54

Tiempo de ejecucion de un proceso
 
Hola,

Si bien este tema ya se trato varias veces, simplemente queria presentar una variante para calcular el tiempo de ejecucion de un proceso en una sola linea de codigo; a mi no me gusta el tener que agregar "las lineas magicas" al inicio y al final del proceso, y me gusta escribir poco codigo y tener algo reusable

Asi que cree una clase que con una sola funcion estatica ejecuta un proceso (TProc) una determinada cantidad de veces y luego retorna el tiempo de ejecucion total:

En este enlace esta el codigo fuente completo

Depende de otra unidad que tambien se encuentra en mi repo, un cronometro, que basicamente usa el viejo truco del "QueryPerformanceTime"


Ejemplo de uso:

Código Delphi [-]

uses
  RTL.Benchmark;

procedure TForm1.Button1Click(Sender: TObject);
const
  ITERATIONS = 5;
var
  Time: TBenchmarkTime: // tipo record con los milisegundos y segundos que demoro la ejecucion total
begin
  Time := TBenchmark.Benchmark(ITERATIONS,
  procedure
  begin
    { foo }
  end);

  // otra forma
  Time := TBenchmark.Benchmark(1, AlgunProceso);

  ShowMessageFmt('ms: %d - secs: %d', [Time.MSecs, Time.Secs]);
end;


De esta manera simplemente agrego un boton cualquiera en la aplicacion, envio como parametro el proceso que quiero ejecutar, y ya tengo el tiempo para informar; tambien puedo controlar la cantidad de veces que quiero que se ejecute

Saludos

Casimiro Notevi 26-12-2015 11:54:09

Código Delphi [-]
Time := TBenchmark.Benchmark(ITERATIONS,   
  procedure   
  begin     
    { foo }   
  end);
¿Eso se puede hacer en alguna versión nueva de Delphi, o es un error?

AgustinOrtu 26-12-2015 14:40:43

Cita:

Empezado por Casimiro Notevi (Mensaje 500805)
Código Delphi [-]
Time := TBenchmark.Benchmark(ITERATIONS,   
  procedure   
  begin     
    { foo }   
  end);
¿Eso se puede hacer en alguna versión nueva de Delphi, o es un error?

Se puede, es la sintaxis para métodos anónimos. A partir de Delphi 2009

dec 26-12-2015 17:29:59

Hola,

Muy interesante. Gracias por compartirlo Agustín. :)

Casimiro Notevi 26-12-2015 22:24:16

Cita:

Empezado por AgustinOrtu (Mensaje 500809)
Se puede, es la sintaxis para métodos anónimos. A partir de Delphi 2009

Estupendo, gracias :)
Cita:

Empezado por dec (Mensaje 500810)
Hola,Muy interesante. Gracias por compartirlo Agustín. :)

Dec, ¿no te queda un poco grande el gorro? :)


La franja horaria es GMT +2. Ahora son las 00:07:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi