Блок исключений использования .net

Asked
Viewd206

0

Я прочитал в статье, что написание множества блоков исключения try catch в коде приведет к увеличению производительности.

Это правда? Почему объявление большого количества блоков исключений влияет на производительность?

Спасибо SCA

  • Проверьте это http://stackoverflow.com/questions/307610/how-do-exceptions-work-behind-the-scenes-in-c

    bobobobo11 июня 2009, 02:16

4 ответов

2

Я думаю, что следующая цитата хорошо резюмирует исключения

Если вас беспокоит производительность исключений, вы неправильно их используете

Исключения не окажут существенного влияния на производительность вашего приложения, если вы будете использовать их так, как они были задуманы. Это для исключительных ситуаций.

Существует много неверной информации о производительности исключений. Было бы здорово, если бы вы могли разместить ссылку на статью, которую читаете, чтобы мы могли понять, почему они думают, что это будет проблемой. Возможно, они охватывают один аспект, который не подходит для большинства ситуаций.

1

(Прошу прощения за то, что не ответил на ваш вопрос напрямую)

Блоки исключений Try / Catch рекомендуются в тех местах, где вы хотите отловить потенциально, но редко, сбой или аномальное поведение, такое как чтение файла или запрос к базе данных. Вы также можете разместить блоки try / catch там, где функция не может выполнить свой контракт.

Используйте утверждения, чтобы обнаруживать ошибки или дефекты, которые никогда не должны возникать. Также используйте утверждения как самодокументированный код. (См. Главу «Защитное программирование» в Code Complete 2nd Edition).

0

Вот хорошая статья о накладных расходах на исключение от создателя TheDailyWTF :

http://weblogs.asp.net/alex_papadimoulis /archive/2005/03/29/396141.aspx

Краткий пример из статьи о 1000 исключениях:

 Console.WriteLine(Now().ToString("hh:mm:ss.fffffff"))
DoNothingImportant()
ThrowRecursiveExceptions(1000)
Console.WriteLine(Now().ToString("hh:mm:ss.fffffff"))

Output:
10:57:38.0252702
10:58:39.9205680
 

Как видите, это занимает около 2 минут, но, поскольку они предназначены только для исключительного поведения, я бы не стал об этом беспокоиться. Кроме того, исключение, которое действительно является «исключением», которое обнаруживается с помощью перехвата и регистрации, будет для вас бесконечно дороже, если вы сможете исправить его сразу, в отличие от попытки призрачного отладки проблемы, когда она терпит неудачу.

5

Блоки try / catch не требуют больших затрат производительности.

Создание исключений имеет некоторые накладные расходы, но это не должно быть проблемой - исключения должны быть исключительными.

В этой статье более подробно рассказывается о том, как реализованы блоки try / catch и о стоимости их выполнения: http://www.programmersheaven.com/user/pheaven/blog/175-Do-trycatch-blocks-hurt-runtime-performance/

  • «Исключения должны быть исключительными» - именно так. Не думаю, что это можно выразить лучше, чем это.

    Noldorin11 июня 2009, 01:04