160 votos

es "otro si" más rápido que el "switch() case"?

Posibles Duplicados:
¿Hay alguna diferencia significativa entre el uso de if/else y switch-case en C#?

Soy un ex Pascal chico,en la actualidad el aprendizaje de C#. Mi pregunta es la siguiente:

Es el código de abajo más rápido que el de hacer un cambio?

    int a = 5;

    if (a == 1)
    {
        ....
    }
    else if(a == 2)
    {
        ....
    }
    else if(a == 3)
    {
        ....
    }
    else if(a == 4)
    {
        ....
    }
    else
        ....

Y el switch:

int a = 5;

switch(a)
{
    case 1:
        ...
        break;

    case 2:
        ...
        break;

    case 3:
        ...
        break;

    case 4:
        ...
        break;

    default:
        ...
        break;


}

Que uno es más rápido?

Yo estoy pidiendo ,porque mi programa tiene una estructura similar(muchos,muchos "else if"). Debo convertirlos en los interruptores?

295voto

Guffa Puntos 308133

En sólo un par de elementos, la diferencia es pequeña. Si usted tiene muchos elementos sin duda debe usar un switch.

Si un switch contiene más de cinco elementos, es implementado usando una tabla de búsqueda o una lista hash. Esto significa que todos los elementos tienen el mismo tiempo de acceso, en comparación con una lista de if:s si el último elemento requiere de mucho más tiempo para llegar porque se tiene que evaluar cada condición anterior primero.

102voto

Wedge Puntos 11910

¿Por qué te importa?

El 99.99% del tiempo, no me importa.

Este tipo de micro-optimizaciones es raro afectar al rendimiento de su código.

También, si usted NECESITA atención, entonces usted debería estar haciendo la creación de perfiles de rendimiento en su código. En cuyo caso, encontrar la diferencia de rendimiento entre un caso del switch y un if-else bloque podría ser trivial.

Edit: en aras De la claridad: aplicar cualquier diseño es más claro y más fácil de mantener. Generalmente cuando se enfrentan con un gran switch-case o if-else bloque de la solución es el uso de polimorfismo. Encontrar el comportamiento que está cambiando y lo encapsula. He tenido que lidiar con el enorme, feo caso del switch código como este antes y por lo general no es muy difícil de simplificar. Pero oh tan satisfactorio.

9voto

Vilx- Puntos 37939

Otra cosa a considerar es: ¿es esto realmente el cuello de botella de la aplicación? Hay casos extremadamente raros cuando la optimización de este tipo, es realmente necesario. La mayoría de las veces, se puede obtener la mejor aceleración por repensar sus algoritmos y estructuras de datos.

6voto

Shaun Bohannon Puntos 271

Yo diría que el interruptor es el camino a seguir, es tanto más rápido y mejor práctica.

Existen diversos vínculos, tales como (http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx) que muestran las pruebas de referencia la comparación de los dos.

4voto

Ólafur Waage Puntos 40104

No debería ser difícil de probar, crear una función que cambia o ifelse entre los 5 números, a lanzar un rand(1,5) en que la función de bucle y que un par de veces mientras que la temporización.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: