Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Performanz von verschachtelte if- Abfragen (https://www.delphipraxis.net/99754-performanz-von-verschachtelte-if-abfragen.html)

daschaos 17. Sep 2007 12:29


Performanz von verschachtelte if- Abfragen
 
Ich als relativer Programmieranfänger hab da ma eine Frage. Kostet es eigentlich viel Zeit, eine if Abfrage die 3-4 'and' oder 'or' benutzt zu durchlaufen?
Ich habe mal einen Profiler über mein Programm laufen lassen und ich frag mich, ob eine Methode die einiges an if Abfragen enthält, auch unter anderem deswegen einen Großteil der Laufzeit ausmacht oder ob das nur daran liegt das diese sehr oft aufgerufen wird?

Schonmal danke :)!

Liebe Grüße,
daschaos

alzaimar 17. Sep 2007 12:36

Re: Performanz von verschachtelte if- Abfragen
 
Kommt auf die Bedingungen an.

Du kannst ja in einer Bedingung 3 Stunden nach irgendetwas suchen, oder eine Web-Anfrage starten oder sonstwas.

Die Rechenzeit für die Abarbeitung bzw. Verknüpfung per OR/AND dürfte im Nanosekundenbereich anzusiedeln sein.

daschaos 17. Sep 2007 12:48

Re: Performanz von verschachtelte if- Abfragen
 
Das heißt wenn sich das lediglich um einfache Abfragen, wie zum Beispiel ob der Wert über 0 liegt oder eine Variable wahr oder falsch ist, es nicht so schlimm ist?

sirius 17. Sep 2007 12:58

Re: Performanz von verschachtelte if- Abfragen
 
Nein. Wie willst du es denn anders machen.
[Ein nichtgeschriebenes Programm läuft immer deutlich schneller als ein geschriebenes Programm. Aber die Unterschiede im Ergebniss sind verblüffend. :mrgreen:]

Wenn die Abfragen nötig sind, dann musst du sie eben machen. Aufhalten tun sie dein Programm nicht. Du könntest nur noch darüber nachdenken, wie du die Reihenfolge in den BEdingungen gestaltest. Denn unter Umständen (wenn das Endergebnis schon fest steht und keine weiteren Funktionen unter den Bedingungen sind) wird die Abfrage schon vorher abgebrochen.

daschaos 17. Sep 2007 13:03

Re: Performanz von verschachtelte if- Abfragen
 
Ok, danke! Aber stimmt, ich könnte die Reihenfolge eventuell noch etwas umstellen...

Matze 17. Sep 2007 13:05

Re: Performanz von verschachtelte if- Abfragen
 
Das müsste sehr schnell gehen. Du kannst das selbst testen, wenn du magst (Vorgehensweise ungetestet):

Delphi-Quellcode:
var
  Start1, Start2: Integer;
  i: Integer;
begin
  Start1 := GetTickCount();
  for i := 1 to 100000 do
  begin
    Start2 := GetTickCount();
    if (a and b and c) then
    begin

    end;
    if i = 1 then
      ShowMessage(IntToStr(GetTickCount() - Start2)); // Zeit, die eine if-Anweisung benötigt
  end;

  ShowMessage(IntToStr(GetTickCount() - Start1)); // Zeit, die alle if-Anweisungen benötigen
end;
Die Dauer des Aufrufs von GetTickCount und die Abfrage i = 1 beeinflussen das Ergebnis natürlich minimal, aber grob kannst du feststellen, wie lange was nun benötigt.

shmia 17. Sep 2007 13:06

Re: Performanz von verschachtelte if- Abfragen
 
Wenn die gleichen Bedingungen oder Teilausdrücke mehrfach auf gefragt werden dann kann man diese
auch vorab in einer Variable vom Typ Boolean ablegen.
Delphi-Quellcode:
 // Wenn also immer wieder so etwas auftaucht:
 if (x >= minx) and (x <= maxx) and .... then
 // dann gibt es eine Vereinfachung
 
 var ValidX : boolean;
 ...
 ValidX := (x >= minx) and (x <= maxx);
 if ValidX and .... then

daschaos 17. Sep 2007 13:17

Re: Performanz von verschachtelte if- Abfragen
 
Ja, in der Tat. Oh Mann, auf sowas könnt ich auch ma kommen. Danke danke danke! Ich muss noch soviel lernen ;).

dominikkv 17. Sep 2007 16:49

Re: Performanz von verschachtelte if- Abfragen
 
wobei der code bei showmessage angehalten wird, dh bei Matzes Beispiel stimmt das zweite showmessage mit der gesamtzeit nicht.

mkinzler 17. Sep 2007 16:50

Re: Performanz von verschachtelte if- Abfragen
 
Wobei sich ShowMessage an sich schon die Performance verschlechtert


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 Uhr.
Seite 1 von 2  1 2      

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