![]() |
Semikolon oder nicht
Hallo zusammen!
Vor längerer Zeit hab ich in nem Buch (Doberanz/Kowalski: Borland Delphi 5 - Grundlagen und Profiwissen) gelesen, man solle doch wo es nicht nötig ist das Semikolon nach einem Befehl weglassen, also wenn ein end auf den Befehl folgt. Der Grund: Das Semikolon verursacht, sofern keine Anweisung mehr folgt, eine sinnlose Leeranweisung. Ich hab mir daraufhin angewöhnt wo es nur geht den Strichpunkt wegzulassen, geht auch ganz automatisch bei mir inzwischen. Ich sehe das aber sonst bei (fast) keinem, und sogar in den Borland Demos wird nicht darauf geachtet. Also hab ich mich mal gefragt ob denn was dran ist, und folgendes probiert:
Delphi-Quellcode:
Zwei bis auf ein Semikolon völlig gleiche (gleich sinnlose) procedures, doch das Ergebnis ist eindeutig: Die erste Procedure braucht 50% mehr Zeit als die zweite! Die erste: ca 300ms, die zweite: ca 200ms. Das Verhältnis bleibt beim Verändern der Zahl.
procedure TForm1.Button1Click(Sender: TObject);
var start,i: integer; begin start := GetTickCount; for i := 0 to 100000000 do begin begin end; end; Caption := IntToStr(GetTickCount-start) end; procedure TForm1.Button2Click(Sender: TObject); var start,i: integer; begin start := GetTickCount; for i := 0 to 100000000 do begin begin end end; Caption := IntToStr(GetTickCount-start) end; Zugegeben, sowas braucht einen nicht zu interessieren bei "normalen" Berechnungen, ist aber trotzdem interessant, dass sogar die Borland Demos keine Rücksicht drauf nehmen. :roll: Gruß, Sebastian |
Ich hab D6 Personal und es sie sind bis auf 2 ms gleich schnell. Mal ist die eine schneller, mal die andere. Scheint also das gleiche zu machen!
:cry: 205 - 207 ms. Das ist ein echter Benchmark :wink: |
Hmm, ich hab auch D6 und immer das gleiche Ergebnis... die Zahlen schwanken nur um höchstens 10ms. Noch jemand mit anderen Ergebnissen?
Gruß, Sebastian |
Aber so blöde sind doch noch nicht mal die von Borland :wink:
So ein Bug (oder etwa gewollt) kann man doch nicht bewusst drinlassen! |
Ach verdammt, das wird ja so auch garnicht compiliert. :oops:
Trotzdem interessant, der zweite Button braucht bei exakt dem selben Code weniger Zeit :?: und das immer wieder :?: Gruß, Sebastian |
Bei mir braucht keiner mehr oder weniger Zeit.
Durchnitt: 206 ms. Toleranz +- 1ms. |
Re: Semikolon oder nicht
Auch Moin, ;)
Zitat:
Zur "Fehlerquelle", ich hab lieber ein paar "nop's mehr im ASM COde, als später ärger beim schreiben. Und die paar ms machen es wirklich nicht aus. Vielleicht wenn man grosse! Spiele programmiert, wo es auf sowas ankommt, aber das würde dann sowieos in Cpp o.ä. passieren, da siehts eh wieder anders aus. Mein Vorschlag, immer reinschreiben. Und wenn es nur ein Exit ist. Grüsse, Daniel :hi: |
PS: Kommt auch auf die Rechnerauslastung an. Wenn du gleichzeitig noch UT2003 spielst brauchst du länger...
|
Hallo!
1. Das überflüssige ';' erzeugt eine Leeranweisung. 2. Delphi optimiert normalerweise (Compilerschalter $O+) den Code (daher die Benchmark-Unterschiede???). 3. Kein ';' vor END und eine eingefügte Anweisung: Nachtragen oder Compiler meckert! Also schreibe ich das ';' grundsätzlich. Die Methode stammt aber wohl noch von den Lochkarten, weil da Änderungen schwer waren (welche Spalte haben wir denn??)! Gruß Dietmar Brüggendiek |
Wenn das ";" eine Leeranweisung ausführen würde, würde das bedeuten, das 100000000 Leeranweisungen keine Rechnezeit verbrauchen. Kann nicht sein. Daraus schließe ich, dass ein ";" keine Leeranweisung verursacht!
|
@Daniel B: Aber du musst zugeben, 50% Unterschied wär schon was... :mrgreen:
Es gibt ja auch immernoch die Meldung
Code:
Naja die kommt bei mir aber eher selten vor. In der Hilfe ist auch nichts davon zu finden. Thema: abgehakt :mrgreen:
[Error] Unit1.pas(41): Missing operator or semicolon
Warum die Buttons allerdings so unterschiedlich schnell waren interessiert mich doch. Gruß, Sebastian |
So rein vom Gefühl her, würde ich immer ein Strichpunkt machen.;
Ich habe es so gelernt.; Und es sieht auch abgeschlossener aus, als sonst!; Wenn wir in der Schule VB Programmieren müssen, läuft das Zeugs bei mir nicht, da ich immer einen Strichpunkt mache.; Dies nur so nebenbei.; |
//Hast du ne Psychose vom Programmieren?;
|
Zitat:
Das es auch an der Auslastung hängt ist klar, aber wieso sollte bei zwei Buttons die Auslastung immer so schwanken, dass immer die gleichen Ergebnisse zustande kommen? Gruß, Sebastian |
Also, ich habe es kurz mal sowhl durch D5 als auch D7 gejagt. Beide erzeugen, bei Standard-Compiler-Schalter für beide Methoden jeweils den exact gleichen Assembler-Code.
Von daher sollte es keinen Unterschied in der Ausfürhungsgeschwindigkeit geben. |
ShowMessage('Nein, warum?');
|
HalloT
Zitat:
Gruß Dietmar Brüggendiek |
Hmm, dann haben sich die das wohl ausgedacht um sich zu profilieren :wink:
Frag mich wie die dann drauf kommen... Es passiert übrigens auch, dass ich, wenn ich mal mit Notepad html schreibe, verzweifelt versuche F9 zu drücken. Gruß, Sebastian |
Ei, weil wenn der Assemblercode gleich ist, sie wohl auch das gleiche machen werden. Ob mit oder ohne ";" im Quelltext;
randomize; windows.sleep(random(10000)); |
War mal wieder zu lahm. Ich komm nur immer mit F5 und F9 durcheinander.
Und damit, dass MatLab kein begin braucht, aber immer ein end... |
Zitat:
Delphi-Quellcode:
:mrgreen:
//Sebastian
Nö, hab Standard-Kompilerschaltereinstellungen, der Code mit bzw ohne dem ; wurde ja auch garnicht kompiliert. Es war also der genau gleiche Code (hab sogar bei beiden dann ein ; hingesetzt, obwohl es, wie gesagt, nicht kompiliert wurde), nur war er bei dem einen Button schneller als beim anderen. Gruß, Sebastian |
@sakura: Ich dachte schon, du siehst den Thread nie. Endlich wird da mal inhaltlich wertvolles zum Problem gesagt. :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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