Обработка исключений, скорость

227
15 июня 2017, 03:35

У меня в конторе, где я работаю, есть множество кастомных библиотек. В том числе есть свой DAL для базы данных MSSQL. В DAL любая ошибка которая приходит из ридера, не важно это хранимая процедура или просто SQL запрос, переконвертируеться в applicationexception. И уже на стороне UI - клиента, выскакивает окно, которое абсолютно все роняет, если не заключить это в try catch.

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

По логике вещей, если мне приходит из базы SQL Exception, я могу на стороне UI его обработать, по коду ошибки. Считайте что стандартная схема обработки исключений от более частных (специфичных) до общих.

В ответ на мои рассуждения я услышал некоторые слова :

Играть в обработку абсолютно всех исключений не имеет смысла, и потом исключения медленно работают, если у тебя приходит ошибка из DAL, надо выбить MessageBox с сообщением и в лог кидать StackTrace, не стоит акцентировать внимание на то что может произойти 1 раз из 1000

На сколько верна данная позиция? Если есть вероятность дубликата, стоит пользователя уведомить о том что имеется дублирование значений, а не кидать MessageBox с сообщением по типу "Введенные значения не удовлетворяют условиям, свяжитесь с администратором"

А также интересует скорость обработки исключений на .net, на сколько сильно они тормозят работу.

Answer 1

Как по мне, то вы пришли к правильной схеме обработки исключений. Думаю, что вам просто хотели сказать, что не нужно тут же бросаться писать десятки блоков catch на каждый тип исключения, вот и все. Да, в большинстве случаев есть один блок catch и всё, но во всех остальных случаях - пара-тройка "специфичных" блоков catch и один "общий" для одного блока try. Это нормально. У меня на дню иногда по десятку звонков раздается, когда я показываю на UI ошибку по типу "Неверно введенные данные". Потом стоит добавить catch для самого частого исключения, для которого покажется читабельный текст с описанием проблемы, и воцаряет спокойствие. Но, повторюсь, не делать ведь этого для каждого типа исключений.

READ ALSO
Определить если Control полностью отрисован в контейнере Windows Forms

Определить если Control полностью отрисован в контейнере Windows Forms

Каким способом можно определить если Control полностью отрисован в контейнеренужно в цикле проверить все дочерние контролы и определить какой...

222
Чтение данных из базы Oracle

Чтение данных из базы Oracle

ЗдравствуйтеНужно считать данные из таблицы базы Oracle

317
Программно развернуть форму

Программно развернуть форму

Каким образом при нажатии кнопки формы "Развернуть" сделать все компоненты данной формы соответствующими размеру окна?

252
Asynchronous Operation in WCF

Asynchronous Operation in WCF

Мне нужно выполнить background операцию, которая занимает много времени в моем WCF-сервисеСервис не должен быть заблокирован во время выполнения...

299