Anel Hernandez,
Cita:
Empezado por Anel Hernandez
...copiar parte de un TStringList a otro...quisiera saber como hacerlo mas rápido...
|
Pregunto:
1- ¿Tienes un problema concreto con los tiempos de copia?
2- ¿Que versión de
Delphi y Windows utiliza tu aplicación?.
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
SL1, SL2 : TStringList;
i : Integer;
Frecuencia, ITime, FTime : Int64;
MSeconds : Int64;
begin
QueryPerformanceFrequency(Frecuencia);
QueryPerformanceCounter(ITime);
SL1 := TStringList.Create;
SL2 := TStringList.Create;
SL1.BeginUpdate;
for i := 1 to 1000 do
SL1.Add('SL1 Dato-' + IntToStr(i));
SL1.EndUpdate;
SL2.BeginUpdate;
for i := 1 to 1000 do
SL2.Add('SL2 Dato-' + IntToStr(i));
for i := 59 to SL1.Count - 1 do
SL2.Add(SL1.Strings[i]);
SL2.EndUpdate;
QueryPerformanceCounter(FTime);
MSeconds := (FTime-ITime) * 1000000 div Frecuencia;
MessageDlg(Format('Total tiempo de copia de TStringList : %u Millonésimas de Segundo',[MSeconds]),mtInformation,[mbOK],0);
SL1.Free;
SL2.Free;
end;
end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32,
Copia parte de un TStringList a otro utilizando los métodos BeginUpdate y EndUpdate para mejorar el performance de la copia, como se puede ver en la siguiente imagen:
Nota:
1- En el tiempo se incluyo la creación y carga de datos de los TStringList para tener un marco referencial de todo el proceso.
2- La muestra de proceso fueron
1000 Strings por cada TStringList.
3- Se copio el
94,10% de los Items de un TStringList a otro (Del 60 al 1000).
4- Los métodos BeginUpdate y EndUpdate mejoraron muy marginalmente el procesamiento de los TStringList,
el proceso de por si es muy rápido por lo cual la mejora es apenas evidente.
Espero sea útil
Nelson.