2009-11-11 10 views
5

Tengo tres condiciones para comparar. ¿Cuál es más rápido entre los dos siguientes? Por favor, indícame. ¡Gracias a todos!¿Qué es más rápido si ... si es necesario o si selecciona ... el caso?

If var = 1 then 
    Command for updating database 
ElseIf var = 2 then 
    Command for updating database 
ElseIf var = 3 then 
    Command for updating database 
EndIf 

y

Select Case var 
    Case 1 
     Command for updating database 
    Case 2 
     Command for updating database 
    Case 3 
     Command for updating database 
End Select 
+8

Cualquier rendimiento que ganes va a ser marginal en el mejor de los casos con un enfoque sobre el otro. La legibilidad del código supera el rendimiento para cosas como esta todo el tiempo. – JohnFx

Respuesta

12

Si compila los dos fragmentos y utiliza el reflector para desmontar, verá que ambos terminan siendo prácticamente la misma IL. El compilador reemplaza el if/else con la declaración case.

Este tipo de micro optimización es poco probable que lo ayude si tiene problemas de rendimiento.

Si tiene problemas de rendimiento, entonces necesita perfilar el programa y averiguar dónde están los cuellos de botella.

Si no tiene problemas de rendimiento, deje de sudar esta cosa y preocúpese de escribir código que sea fácil de entender.

8

Una operación de base de datos habrá al menos 1.000 veces más lento que la declaración if/else o case.

En general, los enunciados de casos se pueden ejecutar más rápido, ya que el compilador o el tiempo de ejecución pueden construir una tabla de salto. Por lo general, para menos de cinco elementos, un compilador escribirá un enunciado de caso como una lista de enunciados if/else. Si se puede medir el rendimiento de lo anterior, supongo que el rendimiento será idéntico, ya que es probable que se ejecuten las mismas instrucciones.

MSIL tiene una declaración específica OpCode for switch. Uno tendría que descompilar a MSIL para ver si VB.Net crearía una tabla de salto para tres elementos.

10

Teóricamente, un switch..casedebería ser más rápido, porque es una tabla de búsqueda (como la mayoría de las veces implementada por el compilador).

Sin embargo, si está preocupado acerca de cuál de estos funciona más rápido, y es realmente el cuello de botella en su programa, tiene un proyecto fenomenalmente bueno.

4

La mejor manera de responder este tipo de preguntas de manera concluyente es con un punto de referencia.

Ponga cada una de las operaciones en un bucle que se ejecute 10.000 veces, registre la hora del sistema antes y después del bucle, reste la hora de inicio del tiempo de finalización y compare los resultados de cada método.

Cuestiones relacionadas