Одна вещь, которую следует учитывать, заключается в том, что стоимость блока try, где не генерируется исключение, - это другой вопрос из стоимости фактического броска и исключения исключения.
Если исключения случаются только в случаях сбоя, вы почти наверняка не заботитесь о производительности, поскольку вы не будете терпеть неудачу очень много раз за выполнение вашей программы. Если вы терпите неудачу в петле (a.k.a: стучите головой о кирпичную стену), ваше приложение, вероятно, имеет более серьезные проблемы, чем медленное. Поэтому не беспокойтесь о стоимости выброса исключения, если вы каким-то образом не вынуждены использовать их для регулярного потока управления.
Кто-то отправил ответ, говорящий о профилировании кода, который выдает исключение. Я никогда не тестировал его сам, но я уверенно предсказываю, что это будет показывать гораздо больший успех, чем просто входить и выходить из блока try, не бросая ничего.
Еще одна вещь, которую следует учитывать, заключается в том, что там, где вы гнездо называет много уровней, может быть даже быстрее иметь одну попытку ... поймать справа вверху, чем проверять возвращаемые значения и распространять ошибки на каждом вызов.
В противоположность этой ситуации, когда вы обнаружите, что вы завершаете каждый звонок в своем собственном try ... catch block, ваш код будет медленнее. И уродливее.
Я никогда не видел код, где они обертывают каждый вызов с помощью `try catch` вместо использования одного большого` try cacth` для обертывания всех вызовов! – 2011-04-06 11:56:28