Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Performance von Vergleichsoperatoren (https://www.delphipraxis.net/85886-performance-von-vergleichsoperatoren.html)

elliot_dd 6. Feb 2007 13:28


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:
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';
Alle Variablen sind von Natur aus Strings. Array [i] hat etwa 230000 Elemente. Array [j] etwa 145000 Elemente.

Hat jemand von Euch eine Erklärung für dieses Verhalten?

ciao ingo

elliot_dd 7. Feb 2007 16:32

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:
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;
bringt keine Performanceunterschiede.

ingo


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz