Ver Mensaje Individual
  #7  
Antiguo 23-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Reputación: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Yo creo que podemos evitarnos el condicional:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var 
  i :Integer;
begin
   Memo1.Text:='Numeros impares';
                                                    
   for i := 0 to 499 do
   begin
        Memo1.Lines.Add(IntToStr(2*i + 1));
   end;
end;


LineComment Saludos

¡Estupendo!, al ver que has reducido el tiempo de ejecución a la mitad usando ingenio puro. Sólo resta mejorar aún más la velocidad de ejecución, aprovechando las nuevas herramientas, sin ser algo perfecto porque faltaría el tema del ordenamiento (aunque en el ejercicio no piden que sea ordenado)... así:

Agregando al uses las unidades System.Threading y System.SyncObjs...

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  vCS: TCriticalSection;
  vStringList: TStringList;
begin
  vStringList := TStringList.Create;
  try
    vCS := TCriticalSection.Create;

    TParallel.&For(0, 499,
      procedure(pI: Integer)
      begin
        vCS.Acquire;
        vStringList.Add((2 * pI + 1).ToString);
        vCS.Release;
      end);

    Memo1.Text := 'Numeros impares';
    Memo1.Lines.AddStrings(vStringList);
  finally
    vCS.DisposeOf;
    vStringList.DisposeOf;
  end;
end;

Ejecutando este mismo ejercicio hasta 10000 en lugar de 1000, en mi maquina con el método anterior se demoró 3150 milisegundos en promedio, sin embargo con el segundo método 295 milisegundos en promedio.

O cuando lo subí a 100000 el promedio con el ejercicio anterior fue de 33843 milisegundos, mientras que con el segundo ha sido de 2900 milisegundos.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 23-04-2017 a las 07:56:43.
Responder Con Cita