Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Boolean: Welcher Aufruf ist schneller? (https://www.delphipraxis.net/37293-boolean-welcher-aufruf-ist-schneller.html)

Helmi 4. Jan 2005 08:04


Boolean: Welcher Aufruf ist schneller?
 
Hallo,

ich hab in meinem Projekt eine CheckBox und im OnClick-Ereignis hab ich folgendes drinstehen:
Code:
procedure TForm1.CheckBox1Click(Sender: TObject)
begin
  with CheckBox1 do
    begin
      Button1.Enabled := Checked;
      Button2.Enabled := Checked;
      Button3.Enabled := Checked;
      Button4.Enabled := Checked;
      Button5.Enabled := Checked;
      Button6.Enabled := Checked;  
     
      {...}

      If Checked then
        //mach was
      else
        //mach was anderes
    end;
end;
gestern hab ich zufälligerweise ein Code-Schnipsel entdeckt und da wird das so gemacht:
Code:
procedure TForm1.CheckBox1Click(Sender: TObject)
var
  B: Boolean;

begin
  B := CheckBox1. Checked;

  Button1.Enabled := B;
  Button2.Enabled := B;
  Button3.Enabled := B;
  Button4.Enabled := B;
  Button5.Enabled := B;
  Button6.Enabled := B;  
     
  {...}

  If B then
    //mach was
  else
    //mach was anderes
end;
Jetzt meine Frage: Welche der beiden Möglichkeiten ist schneller oder sind beide gleich schnell?

Sanchez 4. Jan 2005 08:12

Re: Boolean: Welcher Aufruf ist schneller?
 
Hallo,
Ich würde mal den zweiten für schneller halten, weil nur einmal auf die Property Checked der Checkbox zugegriffen wird.
Sicher bin ich mir aber nicht. Möglicherweise optimiert der Compiler so, dass es egal ist.

grüße, daniel

Boombuler 4. Jan 2005 09:06

Re: Boolean: Welcher Aufruf ist schneller?
 
Hi,

Ich denke auch das der 2. Schneller is! bei Delphi 8 hab ich mit einem ähnlichen kunststück die Geschwindigkeit einer funktion um ca 70% verbessert... allerdings wurde dabei auch ca 80.000x auf ne Property zugegriffen!

Greetz
Boombuler

Kedariodakon 4. Jan 2005 09:24

Re: Boolean: Welcher Aufruf ist schneller?
 
Das zweite sollte schneller sei und zusätzlich ist es auch noch um 2 Zeilen kürzen :zwinker:

Bye

Robert Marquardt 4. Jan 2005 11:00

Re: Boolean: Welcher Aufruf ist schneller?
 
Das kommt natuerlich hauptsaechlich auf die Implementation der Checked-Property an.
Bei TListView ist die Performance z. B. schrecklich.

moritz 4. Jan 2005 11:05

Re: Boolean: Welcher Aufruf ist schneller?
 
Miss es doch einfach...

Helmi 4. Jan 2005 11:34

Re: Boolean: Welcher Aufruf ist schneller?
 
wie kann man so was messen?
soll ich mit der stopuhr daneben stehen und warten?
oder gibts da ne andere Delphi-typischere Möglichkeit?

fkerber 4. Jan 2005 11:37

Re: Boolean: Welcher Aufruf ist schneller?
 
Hi!

Es geht wohl mit GettickCount, aber irgendwer hat mal gesagt, dass das nicht so wirklich toll wäre. War das Hagen (negaH) ??
Such vielleicht mal nach Zeitmessung oder so. Es war in irgendeinem Thread bzgl. Sortieralgorhythmen.


Ciao Frederic

Boombuler 4. Jan 2005 11:56

Re: Boolean: Welcher Aufruf ist schneller?
 
Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
var i:Cardinal;
loop:integer;
begin
  i := GettickCount;
  for Loop := 1 to 100000 do
  with CheckBox1 do
    begin
      Button1.Enabled := Checked;
      Button2.Enabled := Checked;
      Button3.Enabled := Checked;
      Button4.Enabled := Checked;
      Button5.Enabled := Checked;
      Button6.Enabled := Checked;

      {...}

      If Checked then
        //mach was
      else
        //mach was anderes
    end;
  showmessage(inttostr(Gettickcount - i));
end;
Result -> 16 mili sek

Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
var i:Cardinal;
loop:integer;
b:Boolean;
begin
  i := GettickCount;
  for Loop := 1 to 100000 do
  begin
  B := CheckBox1. Checked;

  Button1.Enabled := B;
  Button2.Enabled := B;
  Button3.Enabled := B;
  Button4.Enabled := B;
  Button5.Enabled := B;
  Button6.Enabled := B;

  end;
  showmessage(inttostr(Gettickcount - i));
end;
Result -> 16 mili sek

Helmi 4. Jan 2005 12:17

Re: Boolean: Welcher Aufruf ist schneller?
 
ja das hab ich jetzt auch gemessen - dass das gleich ist von der zeit her

Trotzdem Danke :-)

Jetzt weiss ich endlich wie man eine Procedure ausmisst :-)

[off]
Wieso sagt mir eigentlich niemand dass bei CheckBox1.Checked/RadioGroup1.Checked auch OnClick ausgelöst wird?
[/off]


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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