![]() |
Performance von Vergleichsoperatoren
Hallo an alle,
mir ist gerade ein sehr merkwürdiges Verhalten in meinem Prog bei Vergleichen aufgefallen. Wenn ich in nachfolgendem Vergleich das "<=" durch ">=" ersetze, erfolgt die Abarbeitung meiner Prozedur etwa um den Faktor 50 langsamer. Die Vergleichszeile existiert in der Prozedur 4-mal für verschiedene Variablen des Records.
Delphi-Quellcode:
Alle Variablen sind von Natur aus Strings. Array [i] hat etwa 230000 Elemente. Array [j] etwa 145000 Elemente.
if StrToFloat(Var1)<=(ABS(StrToFloat(Var2[i].FROM_XCOORD)-StrToFloat(Var3[j].fromx))) then
Var2[i].Status_FromX:='OK' else Var2[i].Status_FromX:='not OK'; Hat jemand von Euch eine Erklärung für dieses Verhalten? ciao ingo |
Re: Performance von Vergleichsoperatoren
*push
und kleiner Nachtrag meinerseits: Ich hatte dann noch die bisherigen String-Typen in Fließkommazahlen umgewandelt, so dass die ständige Typumwandlung während des Vergleichs entfällt. Damit ist das ganze natürlich schneller geworden und auch die langsamere Variante lief in ca. 5h durch. Der Performanceunterschied zwischen "<=" und ">=" in meiner Prozedur ist aber weiterhin vorhanden. Ein Vergleich mit folgender Test-Prozedur
Delphi-Quellcode:
bringt keine Performanceunterschiede.
procedure TForm1.Button1Click(Sender: TObject);
var i,j: Integer; t1,t2: Cardinal; x: Integer; begin t1:=GetTickCount; x:=0; for i:=0 to 230000 do begin for j:=0 to 145000 do begin if i>=j then x:=i; //beim zweiten Mal mit "<=" durchgeführt end; end; ShowMessage(FloatToStr((GetTickCount-t1)/1000)); end; ingo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz