Heidi: Schleifen Performance

Hallo Profis.
Bei der ersten Schleife wird die Anzahl der Durchläufe in einer Variablen abgespeichert, bei der zweiten immer direkt abgefragt.

$laenge = count($parameterIDs);
  for ($i = 0; $i < $laenge; $i++) {...}

for ($i = 0; $i < count($parameterIDs); $i++) {...}

Mit Testdaten wurden die Schleifen ca. 13.000 mal durchlaufen. Bei dieser Anzahl ist die erste Schleife bedeutend schneller.
Das hängt natürlich daran, dass bei der zweiten 13.000 mal die Anzahl (13.000) erfragt werden muss.

Bei ca. 20 Durchläufen ist die zweite etwas schneller.
Das liegt daran, dass die Speicherung in die Variable länger dauert als das Abfragen der Länge.

Nun meine Frage: Gibt es eine Faustregel ab wann man die Nummer eins und ab wann die Nummer zwei einsetzt?

Grüße aus München,
Heide

  1. hi,

    Nun meine Frage: Gibt es eine Faustregel ab wann man die Nummer eins und ab wann die Nummer zwei einsetzt?

    Meine Faustregel: Immer die erste.
    Auf das bisschen, was die Zuweisung des Variablenwertes evtl. "kosten" mag, kann i.a.R. verzichtet werden.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo wahsaga,
      vielen Dank.

      Heidi

  2. hallo,

    wie wärs mit einer 3. Variante?

    3)
      for ($i = count($parameterIDs)-1; $i >= 0 ; $i--) {...}

    Gruss planB

    1. Hallo planB,
      ist das nicht mit Version identisch (zumindest die Performance)?

      Heidi

      1. Hello,

        ist das nicht mit Version identisch (zumindest die Performance)?

        nö, denn:

        1. Die Variable für den Schleifenzähler gibt es sowieso, und sie wird pro Schleifendurchlauf angepasst
        2. das count wird nur einmalig ausgeführt, nämlich um die Schleife zu initialisieren.

        MfG
        Rouven

        --
        -------------------
        Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
  3. Hallo Heide,

    Du solltest immer die erste Variante einsetzen!

    Etwas wie count() häufig aufzurufen kostet im Durchschnitt viel mehr Zeit als den Wert vorher einmal in einer Variablen abzulegen. count() o.ä. kann wg. der Speicherabfragen bei großen Arrays oder Hashes ziemlich bremsen.

    Gruß

    • Danny