If versus Switch
Ich habe mir mal das Problem If vs. Switch angenommen.
Man hört ja immer wieder statt vielen If's solle man lieber Switch verwenden.
Doch stimmt das überhaupt? Oder sieht es nur besser aus?
Und ich kann nur sagen ja es stimmt! Switch ist schneller.
Für das überprüfen der Geschwindigkeit nahm ich meine Speed DLL.
An dieser Stelle sei gesagt, dass dieses Beispiel zwar nicht gerade sehr Anschauungsfreudig ist, allerdings zeigt es den Unterschied in der Schnelligkeit ganz gut.
Hier die Codes die getestet wurden:
IF
GML-Quellcode
- // Um die Zahl zu bekommen
- zahl = get_integer("Zahl","");
- // Ab hier wird gemessen
- if (zahl == 1)
- zahl=0;
- else if zahl == 2
- zahl=0;
- else if zahl == 3
- zahl=0;
- else if zahl == 4
- zahl=0;
- else if zahl == 5
- zahl=0;
- else if zahl == 6
- zahl=0;
- else if zahl == 7
- zahl=0;
- else if zahl == 8
- zahl=0;
- else if zahl == 9
- zahl=0;
- else if zahl == 10
- zahl=0;
- else if zahl == 11
- zahl=1;
- // Stop der Messung
SWITCH
GML-Quellcode
- // Um die Zahl zu bekommen
- zahl = get_integer("Zahl","");
- // Ab hier wird gemessen
- switch (zahl)
- {
- case 1: zahl=0;
- break;
- case 2: zahl=0;
- break;
- case 3: zahl=0;
- break;
- case 4: zahl=0;
- break;
- case 5: zahl=0;
- break;
- case 6: zahl=0;
- break;
- case 7: zahl=0;
- break;
- case 8: zahl=0;
- break;
- case 9: zahl=0;
- break;
- case 10: zahl=0;
- break;
- case 11: zahl=1;
- break;
- }
- // Stop der Messung
Als Test Zahl wurde 11 gewählt. Warum?
Ganz einfach weil es jeweils die letzte Zahl bei den Abfragen ist.
Zwar mag der Code von Switch länger sein jedoch ist dieser schneller.
Da bei der Messmethode verschiedene Faktoren die Messung beeinflußen können,
habe ich bei beiden den Test geweils 3 mal durchlaufen lassen.
Hier die Ergebnisse:
Brainfuck-Quellcode
Diese Werte können je nach Computer unterschiedlich sein.
Zeitersparnis von: 0,000004656 Sekunden
Nun wie man sehen kann ist die Switch Abfrage schneller.
Jedoch muss man bei wenigen, 2-3 Abfragen, nicht von If auf Switch wechseln denn je weniger
Abfragen desto geringer ist der Zeitunterschied.
Bei einer größeren Menge von Abfragen ist jedoch immer Switch vorzuziehen, denn je mehr Abfragen desto höher ist der Vorsprung zu If.
Ich hoffe ich konnte euch durch dieses Beispiel zeigen das man nicht immer If nehmen sollte.
Zu sagen wäre noch das man Switch nur nimmt wenn man auf eine feste Zahl prüft also
5, 4456,99... bei If kann man allerdings noch mit < > ... vergleichern, was mit Switch nicht geht.
Face in the wind, we're riding the storm
We'll stay our course whatever will come
~~ Stay (Running) Wild ~~
We'll stay our course whatever will come
~~ Stay (Running) Wild ~~