Question

Je voudrais une réponse de quelqu'un qui fait réellement la programmation en temps réel en C # ou qui comprend vraiment les entrailles de la langue.

Je sais que les exceptions ne doivent pas être utilisées pour manipuler un traitement normal, mais seulement pour détecter les conditions d'erreur. de discussion Il y a beaucoup sur ce sujet.

Je voudrais savoir s'il y a un temps de mise en ralentissement d'avoir simplement un bloc try / catch en place (qui attire jamais une exception à moins que le programme devra finir de toute façon). Le bloc try / catch est à l'intérieur d'une fonction qui doit être appelée à plusieurs reprises. Je soupçonne qu'il ya seulement un coût minimal.

le coût peut être quantifié en termes de cycles de CPU ou d'autres tâches (même coût que la multiplication à virgule flottante), ou d'une autre façon?

Nous utilisons Microsoft C # .Net 3.5 sous Windows XP.

Était-ce utile?

La solution

.NET exceptions ont une très, très faible frais généraux à moins qu'ils ne soient jetés. Avoir un bloc try / catch en place aura un impact sur les performances très minimes. J'ai trouvé presque aucun impact, même très rapides, des boucles serrées, d'avoir la gestion des exceptions en place.

Cependant, des exceptions dans .NET sont très chers quand ils sont jetés. Ils ont tendance à être beaucoup plus fort impact sur les performances si vous les jetez que beaucoup d'autres langues. Cela est dû à l'information complète de la pile glanée lorsque l'exception est créée, etc.

Ce comportement est contraire à d'autres langues, comme le python, où la gestion des exceptions a un coût plus élevé, mais le lancer est en fait assez performant.

Toutefois, si vous êtes concernés, je vous suggère le profil de votre routine et testez vous-même. Cela a été mon expérience après un peu de profilage des performances. Il n'y a pas de substitution pour la mesure dans votre base de code.

Autres conseils

Bonne discussion, avec des mesures, des conséquences sur les performances des prises d'essai ici.

Ne pas essayer / blocs catch a nui au rendement lorsque les exceptions ne sont pas jetés?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top