Основная предпосылка здесь false: размер блока try
не влияет на производительность. На производительность влияет фактическое появление исключений во время выполнения, и это не зависит от размера блока try
.
Тем не менее, сохранение небольших блоков try может привести к улучшению программ.
Вы можете перехватить исключения, чтобы восстановить и продолжить, или вы можете поймать их, просто сообщив о них вызывающей стороне (или человеку, через некоторый пользовательский интерфейс).
В первом случае сбои, которые можно восстановить, часто очень специфичны, и это приводит к меньшим блокам try
.
Во втором случае, когда исключение перехватывается, чтобы его можно было обернуть другим исключением и перебрасывать, или отображать для пользователя, небольшие try
блоки означают, что вы более точно знаете, какая операция завершилась неудачно, и контекст более высокого уровня, в котором был сделан этот вызов. Это позволяет создавать более конкретные отчеты об ошибках.
Конечно, есть & hellip; исключения (извините!) из этих рекомендаций. Например, в некоторых случаях очень специфические сообщения об ошибках могут быть проблемой безопасности.
Может быть полезно знать, какое влияние блок try
оказывает на скомпилированный код. Это не меняет скомпилированные инструкции вообще! (Конечно, соответствующий блок catch
делает, так как он похож на любой другой код.)
Блок try
создает запись в таблице исключений, связанную с методом. В этой таблице есть ряд счетчиков команд источника, тип исключения и инструкция назначения. Когда возникает исключение, эта таблица проверяется на наличие записи с соответствующим типом и диапазона, который включает инструкцию, которая вызвала исключение. Если это так, выполнение переходит к соответствующему номеру назначения.
Важно понимать, что к этой таблице не обращаются (и она не влияет на производительность бега), если она не нужна. (Пренебрегая небольшими накладными расходами при загрузке класса.)