Почему стоит попробовать блоки? - PullRequest
51 голосов
/ 03 октября 2008

Я слышал совет, что вам следует избегать попытки ловить блоки, если это возможно, так как они дорогие.

Мой вопрос касается, в частности, платформы .NET: почему пробные блоки дороги?

Сводка ответов:

Ясно, что в этом вопросе есть два лагеря: те, которые говорят, что пробные блоки стоят дорого, и те, которые говорят, что, может быть, чуть-чуть.

Те, кто говорит, что блоки try стоят дорого, обычно отмечают «высокую стоимость» раскрутки стека вызовов. Лично я не убежден этим аргументом - особенно после прочтения о том, как хранятся обработчики исключений здесь .

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

Была одна статья, которая показалась мне чрезвычайно интересной: в ней говорилось о «других» последствиях производительности блоков try (не обязательно потребления памяти или процессора). Питер Ричи упоминает, что он обнаружил, что код внутри блоков try не оптимизирован, как это было бы иначе компилятором. Вы можете прочитать о его результатах здесь .

Наконец, есть запись в блоге о проблеме от человека, который внедрил исключения в CLR. Посмотрите на статью Криса Брамма здесь .

Ответы [ 11 ]

0 голосов
/ 03 октября 2008

Слегка O / T, но ...

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

Например, можно сказать "writable ()" перед "write ()" и тому подобное.

Это хорошая идея, и если она используется, она делает проверенные исключения в Java выглядящими довольно глупо - я имею в виду, проверяя условие и сразу после этого, будучи вынужденным все еще писать try / catch для того же условия? 1007 *

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...