Ach, ich dachte wirklich immer, das Delphi aus einem Case-Konstrukt eine Art If--else--if-- Geschichte bastelt.
Aus
Delphi-Quellcode:
i := Random(3);
Case i of
0 : j:=2;
1 : j:=1;
2 : j:=0;
End;
wird;
Code:
sub al,$01
jb +$08
jz +$0a
dec al
jz +$0a
jmp $0a
move b1,$02
jmp+$06
mobe b1,$01
jmp +$02
xor ebx,ebx
....
Ähnliches sehe ich, wenn es wesentlich mehr Case-Label gibt (ein arithmetische Sprung wäre dann in jedem Fall besser) . Kannst Du mir ein Szenario zeigen, bei dem Delphi eine Sprungtabelle oder merkwürdige Konstrukte erstellt?
So wie ich das sehe, ist ein Case-Of aber immer schneller, als ein äquivalentes If-Else-If-Else, denn es werden keine direkten Vergleiche auf das Case-Label gemacht, sondern immer subtrahiert/addiert und ein konditionaler Sprungbefehl ausgeführt, was vermutlich schneller ist.
In jedem Fall würde ich ein CASE bevorzugen, denn es sieht einfach übersichtlicher aus.