Я слышал совет, что вам следует избегать попыток блокировки блоков, если это возможно, потому что они дороги.
Мой вопрос конкретно о платформе .NET: почему трассировка блоков стоит дорого?
Резюме ответов:
В этой проблеме явно есть два лагеря: те, которые говорят, что try-блоки дороги, и те, которые говорят "может быть, крошечный бит".
Те, кто говорит, что попробуйте блокировать дорого, обычно упоминают "высокую стоимость" для разворачивания стека вызовов. Лично я не убежден в этом аргументе - особенно после прочтения того, как хранятся обработчики исключений здесь.
Джон Скит сидит в лагере "возможно, маленький" и написал две статьи об исключениях и производительности, которые можно найти здесь здесь.Была одна статья, которую я нашел чрезвычайно интересной: она говорила о "других" эффектах производительности блоков try (не обязательно в памяти или потреблении процессора). Питер Ритчи упоминает, что он обнаружил, что код внутри блоков try не оптимизирован, как это было бы в случае с компилятором. Вы можете прочитать о его результатах здесь.
Наконец, есть запись в блоге о проблеме от человека, который реализовал исключения в CLR. Пойдите взгляните на статью Криса Брумме здесь.