Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - "case" vs. "if then" Geschwindigkeit


Stefan-W - Mo 28.06.04 21:50
Titel: "case" vs. "if then" Geschwindigkeit
Hey Leut's

Kann ich mein Proc schnellermachen indem ich stad "if then" "case" benutze oder nimmt sich das nix? Ich habe viele solche abfragen drinn, und wenn "case" schneller ist würde sich des bei mir lohnen?

Danke schon mal in voraus...

Tschau Stefan


Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Di 29.06.2004 um 08:49


Delete - Mo 28.06.04 21:58

Ich weiß nicht ob sich das viel nimmt. Aber übersichtlicher dürfte "case" wahrscheinlich werden. Zumindest benutze ich es, so möglich, lieber als diverse if/then's.


sourcehunter - Mo 28.06.04 23:31

Ansich dürfte es egal sein welche Abfragen du verwendest. Ich bevorzuge der Übersichtlichkeit halber bei mehreren Entscheidungsmöglichkeiten Case-Abfragen. Die haben nur einen Nachteil. Sie können nur auf Variablen von Abzählbaren Typen angewandt werden, also zum Beispiel nicht auf Strings und Records.


Delete - Mo 28.06.04 23:51

case ist auf alle Fäller besser als if/then, da der Compiler besser optimieren kann. Kuck dir mal eine case-Sbfrage im CPU Fenster an und eine if Abfrage zum Vergleich.


sourcehunter - Di 29.06.04 22:30

Tolle Idee, darauf bin ich garnicht gekommen :oops: , obwohl es auf der Hand gelegen hätte.


Delete - Di 29.06.04 23:11

Hier hat Chewie das mal zerpflückt: http://www.delphipraxis.net/post187088.html#187088

Und wenn du in der DP angemeldet bist, kannst du dir das JPG vom CPU Fenster ankucken, was er angehangen hat.


Motzi - Mi 30.06.04 00:09

Bei einem Case erstellt der Compiler eine "Sprung-Tabelle" und berechnet dann nur noch die Adresse innerhalb dieser Tabelle (berechnet -> daher geht das auch nur mit Ordinalen Typen) während bei einem if immer der ganze Ausdruck auf True geprüft werden muss...!

Das mit der Sprung-Tabelle sieht man ganz gut in Chewies Posting in der DP..


Stefan-W - So 04.07.04 18:31

gut zu wissen, ich werde case in Zukunft öffter nutzen...

Danke für eure Hilfe

Tschau Stefan