Viennamade: String-Vergleich

Hallo!

Welche der beiden Möglichkeiten ist denn eigentlich schneller?

echo ("Nasenbär" == "Nasenbär");
echo strcmp("Nasenbär","Nasenbär");

Beste Grüße
Viennamade

  1. Hallo,

    Welche der beiden Möglichkeiten ist denn eigentlich schneller?
    echo ("Nasenbär" == "Nasenbär");
    echo strcmp("Nasenbär","Nasenbär");

    Dir ist aber schon klar, dass die beiden Zeilen
    nicht das gleiche ausgeben werden?
    Und dass es noch folgendes gaebe:
    echo ("Nasenbär" === "Nasenbär");

    Wenn es Dich so brennend interessiert,
    koenntest Du es ja selbst testen:

    dclp-FAQ: Wie kann ich die Performance zweier
    Befehle vergleichen?
    http://www.dclp-faq.de/q/q-code-performance.html

    Vermutlich musst Du eine Schleife bauen
    und 1000 mal verschiedene Strings
    "vergleichen", um einen spuerbaren
    Unterschied zu kriegen.

    Viel Spass!

    Thomas

  2. Hi,

    Welche der beiden Möglichkeiten ist denn eigentlich schneller?

    vergisses!

    _Wenn_ du irgendwann wirklich einmal Geschwindigkeitsprobleme bekommst _und_ du ernsthaft vermuten kannst, dass ausgerechnet diese Codezeilen den Kohl fett machen, _dann_ schreibe dir einen Benchmark, der das auf _deinem_ Server testet.

    Gruss,
      Carsten

    P.S.: Der unterschied der beiden Varianten ist, wenn sie jeweils nur wenige hundert mal ausgeführt werden, vernachlässigbar gegenüber dem eigentlichen Scriptaufruf (parsing etc.).

    P.S.2: ja, ich schreibe Echtzeitapplikationen. Und es _nervt_ mich wenn Leute Code optimieren, der einmal (bzw. selten) ausgeführt wird. Der Grossteil der Optimierung liegt nun mal im Algorithmus und der Aufrufhäufigkeit und nicht in irgendwelchen Codekonstrukten selten (oder schlimmer noch einmalig) benutzter Codeteile.

    1. hi,

      P.S.2: ja, ich schreibe Echtzeitapplikationen. Und es _nervt_ mich wenn Leute Code optimieren, der einmal (bzw. selten) ausgeführt wird. Der Grossteil der Optimierung liegt nun mal im Algorithmus und der Aufrufhäufigkeit und nicht in irgendwelchen Codekonstrukten selten (oder schlimmer noch einmalig) benutzter Codeteile.

      ein wahres wort. ich frage mich auch, wie man sich über sowas ernsthaft gedanken machen kann.

      gruss,
      wahsaga

  3. Hello,

    echo ("Nasenbär" == "Nasenbär");
      vergleicht nur den Inhalt der beiden Operanden auf Gleichheit
      und zwar Stelle für Stelle in einer Schleife.
      liefert 0 (false) beim ersten Fehler und 1 (true), wenn die
      Vergleichsschleife bis zum Ende fehlerfrei durchlaufen wurde

    echo ("Nasenbär" === "Nasenbär");
      vergleicht zuerst dei Typenkennzeichnung, die in der Variablen-
      tabelle eingetragen ist und dann noch wie vorstehend

    echo strcmp("Nasenbär","Nasenbär");
      vergleicht die beiden Operanden bitweise, d.h. führt einen
      mathematischen Größenvergleich durch. Dazu muss die Länge verglichen
      werden und wenn diese gleich ist, die Werte der einzelnen Stellen
      in Bezug auf die Stellung im collating key (~Zeichnsatz) verglichen
      werden, und zwar bis zum Ende der Schleife.
      Liefert "<0" für str1 < str2, "0" für str1 = str2, "1" für str1 > str2

    Man musste hier also einen zusätzlichen Vergleich durchführen, um
      eine gleichwertige Aussage zu 1. oder 2. zu erhalten. Denn "0" steht
      sonst für "false" und hier würde "0" gerade "true" bedeuten.

    Man kann also 1. keine allgemeingültige Aussage treffen, welcher Vergleich denn länger dauern würde, da alle drei Vergleichsarten unterschiedliche Zielsetzungen haben und die Dauer von den Operanden abhängig ist. Der aufwändigste Vergleich ist sicher der dritte.

    ------------

    Übrigens darf man hier _jede_ Frage stellen, wenn sie den Regeln entspricht. so sthet das in den FAQ. Ich konnte bei Deiner Frage keinen Regelverstoß erkennen, allerdings bei den Antworten. ;-)

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hallo Tom,
      danke für Deine Expertise, war interessant zu lesen. In den MS-Studio-Entwicklungsumgebungen - und von dort komme ich - gibt's einen signifikanten Performance-Unterschied zwischen "strcomp" und einem Operatoren-Vergleich. Daher meine Frage.
      Danke
      Viennamade