String-Vergleich
Viennamade
- php
0 Thomas Luethi0 Carsten0 wahsaga
0 Tom
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
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
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.
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
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
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