Je n'ai aucune idée de ce dont parlent les gens quand ils disent qu'ils sont lents seulement s'ils sont lancés.
EDIT : Si les exceptions ne sont pas lancées, cela signifie que vous faites new Exception() ou quelque chose comme ça. Sinon, l'exception va provoquer la suspension du thread et le déplacement de la pile. Cela peut être acceptable dans des situations mineures, mais dans les sites Web à fort trafic, le fait de s'appuyer sur les exceptions comme mécanisme de flux de travail ou de chemin d'exécution vous causera certainement des problèmes de performance. Les exceptions, en soi, ne sont pas mauvaises et sont utiles pour exprimer des conditions exceptionnelles.
Le flux des exceptions dans une application .NET utilise des exceptions de première et de seconde chance. Pour toutes les exceptions, même si vous les attrapez et les traitez, l'objet exception est toujours créé et le framework doit toujours parcourir la pile pour rechercher un gestionnaire. Si vous attrapez et relancez l'exception, cela va bien sûr prendre plus de temps - vous allez avoir une exception de première chance, l'attraper, la relancer, provoquant une autre exception de première chance, qui ne trouve pas de gestionnaire, ce qui provoque une exception de seconde chance.
Les exceptions sont également des objets sur le tas. Par conséquent, si vous lancez des tonnes d'exceptions, vous provoquez des problèmes de performance et de mémoire.
De plus, selon ma copie de "Performance Testing Microsoft .NET Web Applications" écrite par l'équipe ACE :
"Le traitement des exceptions est coûteux. L'exécution du thread concerné est suspendue pendant que le CLR parcourt la pile d'appels à la recherche du bon gestionnaire d'exception, et lorsqu'il est trouvé, le gestionnaire d'exception et un certain nombre de blocs finaux doivent tous avoir leur chance d'être exécutés avant que le traitement normal puisse être effectué."
Ma propre expérience sur le terrain a montré que la réduction des exceptions améliorait considérablement les performances. Bien sûr, il y a d'autres éléments à prendre en compte lors des tests de performance - par exemple, si vos entrées/sorties de disque sont très élevées ou si vos requêtes sont effectuées en quelques secondes, vous devez vous concentrer sur ces éléments. Mais la recherche et la suppression des exceptions doivent constituer un élément essentiel de cette stratégie.
13 votes
Il y a des mensonges, des foutus mensonges et des repères :)
0 votes
Malheureusement, plusieurs réponses très votées ici n'ont pas compris que la question demandait "à quel point les exceptions sont lentes", et ont spécifiquement demandé d'éviter le sujet de la fréquence de leur utilisation. Une réponse simple à la question posée est la suivante : ..... Sur le CLR de Windows, les exceptions sont 750 fois plus lentes que les valeurs de retour.