![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Есть класс (допустим выполняющий операции с БД). Есть методы в них может произойти исключительная ситуация... допустим при выполнения sql команды .... надо его обработать на более высоком уровне чем этот метод, да и текст по культурней вывести ... то есть я думаю надо так
Я правильно написал ... просто визуалки рядом нет... не могу проверить! |
|||
|
||||
B3cK |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 29.5.2005 Где: Минск Репутация: нет Всего: 1 |
|
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Хоббит, не так, а вот так:
|
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Отрывать руки и не приклеивать! Обязательно надо делать свитчи на разные типы исключений, иначе - совать его в InnerException. А то неизвестно - у тебя полетело исключение потому что SQL неправильный или потому что где-то что-то не кастуется. Вот так: |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
З.Ы. могу только проконстатировать, что при постоянном использовании оператора trrow в своих приложениях, производительность серьёзно падает... Это действительно так.
-------------------- ![]() |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
P.S. Лично мне нравится свитч из Немерле:
|
|||
|
||||
agl |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Поделитесь пожалуйста мыслями, чем обработка исключений(при помощи встроенных классов исключений или написанных программистом) лучше чем обыкновенные проверки в if'ах.
Например есть класс Queue и в нем имеется функция get(). В функции надо обработать ситуацию когда пользователь пытается получить из пустой очереди какую то инфу. 1-ый вариант обработки возможной ошибки
2-ой вариант обработки возможной ошибки
очень хотелось бы услышать от опытных людей всегда ли стоит использовать обработку исключений при помощи try / catch / throw, т.к. прога из-за таких обработок оооооооочень тормозит. |
||||
|
|||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Все зависит от:
1) умеет ли класс, использующий твой метод (get -- тоже метод) правильно распознать произошла ошибка или нет. В твоем случае это Console.WriteLine(" - The Queue is empty.") что вообще никто не словит (если сильно не захочет) и возврат нуля (который теперь исключен из допустимых символов). 2) кто должен отвечать за правильность данных. Тот кто вызывает либо тот кого вызывают. Если первый, то логичнее (и универсальнее) использовать throw (на случай если "профессор--лопух"), если нет, то возможно обработать исключение более мягко и уведомить вызывающий код задокументированным способом. 3) критично ли эта операция. Если это юзверьинтерфейс, то человек особо не заметит задержки произошедшей по вине throw (зато ошибаться будет часто). Если же это автоматическая обработка большого объема данных (даже если не большего), то нужно избежать как можно большего количества throw 4) может кто-нить еще добавит что-нить ИМХО |
|||
|
||||
agl |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
ну это не проблема, а просто пример =), в жизни можно сделать errflag например ну и задавать ему true если произошла ошибка. Спасибо за ответ ![]() ![]() Это сообщение отредактировал(а) agl - 3.11.2006, 00:44 |
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 7 Всего: 93 |
mr.DUDA, а что ты имеешь ввиду под использованием throw? я вот просто подумываю, что будет работать быстрее:
ты имеешь ввиду заключение кода в try...catch ухудшает быстродействие? или непосредственное исполнение оператора throw ухудшает бытродействие? -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
archimed7592, непосредственное развертывание стека и поиск оператора который этот throw словит --- вот что замедляет быстродействие
Ну попробуй. Я, например, такого исследования не проводил. Хотя, на вскидку, ---- второй будет быстрее, ведь он словит эксэпшен в первом блоке, а в остальные даже не пойдет ![]() |
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Генерация исключения (всё что происходит при этом - упаковка stack trace, и поиск подходящего блока catch) - оверхед, и если злоупотреблять оператором throw, то в худшем случае оверхед может и до десятка процентов дорасти. Простой пример, без вложенных try..catch:
Я не говорю, что исключения не нужно обрабатывать и детализировать, это ересь; но пользоваться ими там, где можно было бы обойтись без генерации исключения - плохая практика. -------------------- ![]() |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |