AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Performance von Vergleichsoperatoren

Ein Thema von elliot_dd · begonnen am 6. Feb 2007 · letzter Beitrag vom 7. Feb 2007
Antwort Antwort
elliot_dd

Registriert seit: 8. Dez 2004
12 Beiträge
 
Delphi 7 Enterprise
 
#1

Performance von Vergleichsoperatoren

  Alt 6. Feb 2007, 13:28
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:='OKelse 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
  Mit Zitat antworten Zitat
elliot_dd

Registriert seit: 8. Dez 2004
12 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Performance von Vergleichsoperatoren

  Alt 7. Feb 2007, 16:32
*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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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