Registriert seit: 26. Mai 2005
37 Beiträge
Turbo Delphi für Win32
|
Re: Prozedur zu langsam, Optimierung nötig
11. Mär 2007, 15:43
Ich habe jetzt mal den Tip, die Festplatten Zugriffe durch Open, Close und read und writeln möglichst wegzulassen befolgt. Dies hat in einer anderen Prozedur in meinem Programm auch einen erhelblichen Geschwindigkeitszuwachs gebracht. Mit Matritzen, Quickseach usw. blick ich leider nicht durch, deswegen habe ich die Prozedur jetzt mal so geändert. Leider ist diese Variante überhaupt nicht schneller, würde eher sagen deutlich langsamer. Wo ist denn da jetzt der Flaschenhals? Das Loadfrom File geht noch recht schnell aber dann braucht der Rechner bestimmt 1-5 Sekunden pro Zeile. Die Listboxen habe ich unsichtbar gemacht.
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
var
rxl: string;
suchkoor: string;
Koor: Array[0..1000] of string;
i,l,k,j,maxi: Integer;
maxrxl: Integer;
begin
Screen.Cursor:=crHourglass;
DecimalSeparator:='.';
listbox1.Clear;
listbox2.Clear;
listbox2.items.Add('lon'+chr(9)+'lat'+chr(9)+'RXL'+chr(9)+'CID'+chr(9)+'BCCH');
listbox1.Items.LoadFromFile(OpenDialog1.FileName);
label10.Caption:=inttostr(listbox1.Items.Count);
update;
i:=1;
repeat
suchkoor:=copy(Listbox1.Items[i],1,GetPosNumX(chr(9),Listbox1.Items[i],2)-1);
l:=1;
k:=0;
repeat
if pos(suchkoor,listbox1.Items[l])>0 then
begin
koor[k]:=listbox1.Items[l];
k:=k+1;
listbox1.Items.Delete(l);
l:=l-1;
end;
l:=l+1;
until l=listbox1.Items.Count-1;
maxrxl:=-200;
maxi:=0;
if k=1 then listbox2.Items.Add(koor[0])
else
begin
for j := 0 to k - 1 do
begin
rxl:=copy(koor[j],GetPosNumX(chr(9),koor[j],2)+1,GetPosNumX(chr(9),koor[j],3)-GetPosNumX(chr(9),koor[j],2)-1);
label11.Caption:=koor[j];
label12.Caption:=inttostr(k);
update;
if strtoint(rxl)>maxrxl then
begin
maxrxl:=strtoint(rxl);
maxi:=j;
end;
end;
listbox2.Items.Add(koor[maxi]);
end;
i:=1;
until i=listbox1.Items.count-1 ;
listbox2.Items.SaveToFile('c:\bs.txt');
Screen.Cursor:=crDefault;
end;
Gruß
Carsten
|
|
Zitat
|