If vs. Switch, Wer ist schneller?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • If vs. Switch, Wer ist schneller?

      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

      1. // Um die Zahl zu bekommen
      2. zahl = get_integer("Zahl","");
      3. // Ab hier wird gemessen
      4. if (zahl == 1)
      5. zahl=0;
      6. else if zahl == 2
      7. zahl=0;
      8. else if zahl == 3
      9. zahl=0;
      10. else if zahl == 4
      11. zahl=0;
      12. else if zahl == 5
      13. zahl=0;
      14. else if zahl == 6
      15. zahl=0;
      16. else if zahl == 7
      17. zahl=0;
      18. else if zahl == 8
      19. zahl=0;
      20. else if zahl == 9
      21. zahl=0;
      22. else if zahl == 10
      23. zahl=0;
      24. else if zahl == 11
      25. zahl=1;
      26. // Stop der Messung
      Alles anzeigen


      SWITCH

      GML-Quellcode

      1. // Um die Zahl zu bekommen
      2. zahl = get_integer("Zahl","");
      3. // Ab hier wird gemessen
      4. switch (zahl)
      5. {
      6. case 1: zahl=0;
      7. break;
      8. case 2: zahl=0;
      9. break;
      10. case 3: zahl=0;
      11. break;
      12. case 4: zahl=0;
      13. break;
      14. case 5: zahl=0;
      15. break;
      16. case 6: zahl=0;
      17. break;
      18. case 7: zahl=0;
      19. break;
      20. case 8: zahl=0;
      21. break;
      22. case 9: zahl=0;
      23. break;
      24. case 10: zahl=0;
      25. break;
      26. case 11: zahl=1;
      27. break;
      28. }
      29. // Stop der Messung
      Alles anzeigen


      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

      1. If
      2. 0.000016762 Sekunden
      3. 0.000016203 Sekunden
      4. 0.000016203 Sekunden
      5. Durchschnitt
      6. 0.000016389 Sekunden
      7. -----------------------------
      8. Switch
      9. 0.000012013 Sekunden
      10. 0.000011454 Sekunden
      11. 0.000011733 Sekunden
      12. Durchschnitt
      13. 0.000011733 Sekunden
      Alles anzeigen

      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 ~~