Ich habe morgens ein PHP-Programm geschrieben. Da es eine große Datenmenge verarbeiten musste, musste ich die Laufzeit berücksichtigen. Dann stieß ich auf ein Problem bei der Berechnung des Gewichts jedes Artikels. Ich überlegte, ob ich switch-case oder if-else verwenden sollte Die Effizienz ist viel höher als bei if-else. Dies ist insbesondere bei großen Datenmengen und mehreren Bedingungen der Fall Dies ist auch verständlich, da die Vergleichs-Beurteilungsaussagen von Switch-Case sehr konzentriert sind, sodass der Cache aufgrund des ständigen Vergleichs und der Beurteilung von Zweigen nicht aktualisiert wird. Der Vergleichs- und Beurteilungsteil von if-else ist jedoch relativ verstreut. Jeder Vergleich muss an eine sehr weite Stelle springen, sodass der Cache jedes Mal (fast jedes Mal) aktualisiert werden muss, was natürlich zu einer sehr langsamen Geschwindigkeit führt .
Folgendes ist etwas „Geklautes“ aus dem Kompilierungsprinzip:
switch(val){ case 1:...;break; case 2:...;break; case 4:...;break; case 6:...;break; case 7:...;break; default:...; } 对应的汇编是 addr_tab: dd def_addr dd addr1 dd addr2 dd def_addr dd addr4 dd def_addr dd addr6 dd addr7 cmp val,7 ja def_addr jmp dword ptr [eax*4+addr_tab] addr1: .... addr2: .... addr4: .... addr6: .... addr7: .... def_addr: ....
Switch hat im Vergleich zu if einen Geschwindigkeitsvorteil. Der andere besteht darin, dass Switch im Allgemeinen nicht gut funktioniert Verwenden Sie in lockeren Situationen anstelle der „Compare-Shift“-Methode das Befehlspaar dec(sub)-jz. Letzteres verkürzt nicht nur die Länge des Befehls, sondern bietet auch einen Geschwindigkeitsvorteil.
Den Test des Programms werde ich nicht veröffentlichen. Wer Interesse hat, sollte es selbst testen. Ich habe mich für switch-case entschieden.
Das obige ist der detaillierte Inhalt vonPHP: Was ist effizienter, Switch-Case oder If-Else?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!