2013-08-26 3 views
-1

Например, у меня есть dll (Helper.dll), который содержит некоторые методы работы с внешней системой через библиотеку провайдера (Provider.dll). Provider.dll определяет SystemIsDownException, и я повторно бросаю его в Helper.dll. Кроме того, у меня есть еще одна dll (Service.dll), которая использует Helper.dll и тонны других, она должна поймать различные типы исключений и как-то обработать их. Мой вопрос: действительно ли это влияет на производительность, если я поймаю SystemIsDownException (от Provider.dll) в Service.dll? Или я должен определить свои собственные типы исключений для каждого исключения из Provider.dll в Helper.dll? Извините за длинный вопрос.Производительность. Полезно ли определять собственные типы исключений?

+1

Почему, по вашему мнению, * тип * исключенного исключения повлияет на производительность? – jalf

+0

Какую работу вы беспокоитесь? Погрузка производительности сборки или фактическое бросание/обработка исключений? –

+0

Это просто не имеет значения, где определено исключение. Как только инфраструктура .net привязана к dll, которая содержит определение, тип исключения, где dll определяется в, не имеет значения. – Alpay

ответ

3

Выполняйте то, что вы должны делать в логических терминах, и не заботитесь о производительности.

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

2

Ответьте на короткий вопрос: не перехватывайте и не перебрасывайте исключения, если вы не обрабатываете исключения и не добавляете полезную информацию. Просто перехватывая исключения, а затем перестраивая их, беспорядочно стекает стек (например, когда исходное исключение теряется), и, конечно же, это влияет на производительность (так как время выполнения должно готовить тупость tttrace). Если вам нужно скрыть исключения от provider.dll, если service.dll не может ссылаться на него, вам нужно их восстановить в helper.dll (если вы хотите поймать конкретное исключение из provider.dll в service.dll).

1

Некоторые идеи:

  • Чем меньше оберточной код вы пишете, тем легче будет поддерживать ваш код
  • Не используйте исключения для логического управления
  • Исключения имеют очень мало общего с эффективностью, если вы зададите этот вопрос, вы, вероятно, используете его для управления логикой

Таким образом, ответ будет: определять полезные и значимые исключения, которые вам необходимы (отчетливо). Отсутствует производительность, если вы не используете исключения для прямого логического потока, и в этом случае вы должны остановить и реорганизовать свое приложение.

+0

Согласовано. НЕ используйте для логического управления. Upvote. Это также указано здесь: http://blogs.msdn.com/b/kcwalina/archive/2005/03/16/396787.aspx – granadaCoder

Смежные вопросы