Delphi-PRAXiS
Seite 2 von 2     12   

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)

Namenloser 17. Sep 2007 17:01

Re: Performanz von verschachtelte if- Abfragen
 
Zitat:

Zitat von Matze
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.

Delphi-Quellcode:
if (a and b and c) then
begin

end;
Ich wage zu bezweifeln, dass der Compiler das nicht wegoptimiert.

Matze 17. Sep 2007 17:05

Re: Performanz von verschachtelte if- Abfragen
 
@Dominik/Markus: Stimmt. Wie bereits geschrieben, das soll nur das Vorgehen sein, die Umsetzung müsste etwas anders aussehen.
@NamenLozer: Das sind eben seine Bedingungen. Ich weiß nicht, wie diese aussehen. Das können Funktionsaufrufe sein und ähnliches.

Namenloser 17. Sep 2007 17:17

Re: Performanz von verschachtelte if- Abfragen
 
Hi Matze,

das meinte ich nicht. Wenn in der if-abfrage kein code steht wird die gesamte if-abfrage sicherlich wegoptimiert. Wenn da aber was drinsteht ist das Ergebnis verfälscht. Es sei denn man macht darin eine zweite Zeitmessung - Die braucht aber auch wieder Zeit :mrgreen:

Phantom1 17. Sep 2007 19:23

Re: Performanz von verschachtelte if- Abfragen
 
Zitat:

Zitat von NamenLozer
Hi Matze,

das meinte ich nicht. Wenn in der if-abfrage kein code steht wird die gesamte if-abfrage sicherlich wegoptimiert. Wenn da aber was drinsteht ist das Ergebnis verfälscht. Es sei denn man macht darin eine zweite Zeitmessung - Die braucht aber auch wieder Zeit :mrgreen:

Oder man deaktiviert einfach die CompilerOptimierung ^^

dominikkv 17. Sep 2007 19:37

Re: Performanz von verschachtelte if- Abfragen
 
so hier ein test:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Zeit1, Zeit2: Cardinal;
  I, Dummy: Integer;
const
  Durchläufe = 100000000000;
begin
  Dummy := 0;
  Zeit1 := GetTickCount;

  for I := 0 to Durchläufe do
    if I <= Durchläufe then
      Inc(Dummy);

  Zeit1 := GetTickCount - Zeit1;
  Dummy := 0;
  Zeit2 := GetTickCount;

  for I := 0 to Durchläufe do
    Inc(Dummy);

  Zeit2 := GetTickCount - Zeit2;

  showmessage(Format('Ich habe für %d if-Abfragen %d Millisekunden benötigt!'#13#10+
    'Das sind %12.10f Millisekunden pro if-Abfrage!', [Durchläufe, (Zeit1 - Zeit2), ((Zeit1 - Zeit2) / Durchläufe)]));
end;

daschaos 19. Sep 2007 08:52

Re: Performanz von verschachtelte if- Abfragen
 
Ok, das probier ich auch mal aus! Danke für eure schnellen Antworten!

Findet man eigentlich auch so allgemeine Tipps zur Codeoptimierung irgendwo? Wie zum Beispiel das Sortieren der if- Abfragen nach Abbruchkriterium etc. was hier so vorgeschlagen wurde? Sicher ist es nich immer einfach, alles zu verallgemeinern, aber so ein paar generelle Dinge, was man irgendwie beachten könnte?! Das wäre toll...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 Uhr.
Seite 2 von 2     12   

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