PHP: Was ist effizienter, Switch-Case oder If-Else?

黄舟
Freigeben: 2023-03-11 11:22:02
Original
1837 Leute haben es durchsucht

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: 
                  ....
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage