394 votes

est « else if » plus vite que le « affaire que » ?

Double Possible:
Est-il une différence significative entre l'utilisation de if/else et switch-case en C#?

Je suis un ex Pascal guy,présentement en train d'apprendre le C#. Ma question est la suivante:

Le code ci-dessous plus rapide que de faire un switch?

    int a = 5;

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

Et l'interrupteur:

int a = 5;

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

    case 2:
        ...
        break;

    case 3:
        ...
        break;

    case 4:
        ...
        break;

    default:
        ...
        break;


}

Lequel est le plus rapide?

Je me demande ,parce que mon programme a une structure similaire(beaucoup,beaucoup de "else if" des déclarations). Dois-je les transformer en leviers?

699voto

Guffa Points 308133

Pour juste un peu d’objets, la différence est faible. Si vous avez beaucoup d’articles vous devez absolument utiliser un interrupteur.

Si un commutateur contient plus de cinq éléments, il est implémenté à l’aide d’une table ou une liste de hachage. Cela signifie que tous les éléments obtenir le même temps d’accès, par rapport à une liste de cas : s où le dernier élément prend beaucoup plus de temps à atteindre car elle doit évaluer toutes les conditions précédentes d’abord.

183voto

Wedge Points 11910

Pourquoi s'en faire?

99,99% du temps, vous ne devriez pas de soins.

Ces sortes de micro-optimisations sont pas susceptibles d'affecter les performances de votre code.

Aussi, si vous avez BESOIN de soins, alors vous devriez être en train de faire le profilage des performances sur votre code. Auquel cas, la découverte de la différence de performances entre un commutateur de cas et un if-else bloc serait trivial.

Edit: Pour plus de clarté: mettre en œuvre selon la conception est plus clair et plus facile à gérer. Généralement lorsqu'ils sont confrontés à un énorme cas de commutateur ou if-else bloc la solution est d'utiliser le polymorphisme. Trouver le problème de l'évolution et de l'encapsuler. J'ai eu à traiter avec grand, laid commutateur de code cas comme ça avant, et en général, il n'est pas difficile de simplifier. Mais ô combien satisfaisant.

32voto

Michael Barth Points 1983

Croyant cette évaluation de la performance, le commutateur cas est plus rapide.

C'est la conclusion:

Les résultats montrent que l'instruction switch est plus rapide à exécuter que la si-sinon-si l'échelle. Cela est dû à la capacité du compilateur d'optimiser l'instruction switch. Dans le cas de la si-sinon-si l'échelle, le code doit traiter chaque instruction if dans l'ordre déterminé par le programmeur. Cependant, parce que chaque cas à l'intérieur d'une instruction switch ne repose pas sur des affaires précédentes, le compilateur est capable de re-commander le test de manière à fournir le plus rapide d'exécution.

16voto

Vilx- Points 37939

Une autre chose à considérer : est-ce vraiment le goulot d’étranglement de votre application ? Il y a des cas extrêmement rares lors de l’optimisation de ce genre est vraiment nécessaire. La plupart du temps, vous pouvez obtenir des accélérations bien mieux de repenser vos algorithmes et structures de données.

10voto

Shaun Bohannon Points 271

Je dirais que l’interrupteur est le moyen d’aller, c’est à la fois plus vite et mieux pratiquer.

Il y a différents liens tels que (http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx) qui montrent les tests d’évaluation en comparant les deux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X