![]() |
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 |
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. |
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?
|
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. |
Re: Performanz von verschachtelte if- Abfragen
Ok, danke! Aber stimmt, ich könnte die Reihenfolge eventuell noch etwas umstellen...
|
Re: Performanz von verschachtelte if- Abfragen
Das müsste sehr schnell gehen. Du kannst das selbst testen, wenn du magst (Vorgehensweise ungetestet):
Delphi-Quellcode:
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.
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; |
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 |
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 ;).
|
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.
|
Re: Performanz von verschachtelte if- Abfragen
Wobei sich ShowMessage an sich schon die Performance verschlechtert
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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