Ver Mensaje Individual
  #26  
Antiguo 24-04-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jhonny Ver Mensaje
Lo que me asombra es que a ecfisa se le haya demorado tanto usando BeginUpdate/EndUpdate.
A mi me asombran sus números. No sé cómo los obtuvo. Para 1000 números yo obtengo:

Código:
Concatenando: Alrededor de 3,000 microsegundos
BeginUpdate/EndUpdate: Alrededor de 72,000 microsegundos
Uso esto:

Código Delphi [-]
type
  ICounter = Interface
    function Ellapsed(): Single;
    function EllapsedAsString: String;
  end;

  TCounter = class(TInterfacedObject, ICounter)
  private
    Frequency, StartTicks: Int64;

  public
    constructor Create();
    function Ellapsed(): Single;
    function EllapsedAsString: String;
  end;

{ TCounter }

constructor TCounter.Create;
begin
  QueryPerformanceFrequency(Frequency);
  QueryPerformanceCounter(StartTicks);
end;

function TCounter.Ellapsed: Single;
var
  CurrentTicks: Int64;

begin
  QueryPerformanceCounter(CurrentTicks);
  Result := 1000000*(CurrentTicks - StartTicks);
  Result := Result/Frequency;
end;

function TCounter.EllapsedAsString: String;
begin
  Result := FormatFloat('0,000.0 µs', Ellapsed);
end;

Ejemplo:

Código Delphi [-]
var
  Counter: ICounter;

begin
  Counter := TCounter.Create();

  // Proceso a medir

  ShowMessage(Counter.EllapsedAsString);
end;

LineComment Saludos
Responder Con Cita