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?
Réponses
Trop de publicités?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.
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.
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.
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.
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.