Нужно ли вставлять, обновлять и удалять базы данных в try / catch? - PullRequest
0 голосов
/ 23 июня 2010

Я всегда использую try catch, когда имею дело с операциями, связанными с базой данных, например.

try
{
 DataContext.AddtoObjectname(obj);
 DataContext.SaveChanges();
}
catch(Exception e)
{
 throw new Exception("Problems adding object" + e);
}

Но я читал о влиянии try / catch на производительность здесь -
Блоки блоков try / catch влияют на производительность, когда не генерируются исключения?
Так что я должен добавить попробовать поймать то, что я делаю выше, или я должен выбрать другое. Спасибо за вашу помощь.

Ответы [ 4 ]

4 голосов
/ 23 июня 2010

Сами операторы Try / Catch не оказывают существенного влияния на производительность, но могут генерировать и перехватывать множество исключений.

В общем, вы хотите убедиться, что вы перехватываете только соответствующие исключения - в противном случае вы можете маскировать ошибку в вашем приложении.В этом случае DataException или UpdateException , вероятно, являются хорошими кандидатами, поскольку они являются исключениями, которые будут выброшены, если что-то пойдет не так в SaveChanges.

Похоже, выперехватить исключение, чтобы добавить к нему собственную дополнительную информацию.В этом случае всегда лучше сохранить исходное исключение как внутреннее исключение.

throw new Exception("Problems adding object" + e, e);

Я бы также посоветовал создать для этого собственный тип исключения, специфичный для приложения.

2 голосов
/ 23 июня 2010
  • Только поймать то, что вы можете справиться.Если вы не можете справиться с ошибкой и корректно восстановить ее, дайте исключительной ситуации всплыть на более высокий уровень, который сможет ее обработать.Если вы хотите записать исключение там, где это происходит (разумно), то зарегистрируйте его и повторно выбросьте то же исключение, если вы не можете восстановить.общее исключение.Вместо этого явно укажите исключения: catch (SQLException e) вместо catch (Exception e)

  • Если вы выбросили исключение из блока catch, обязательно поместите пойманное исключение во внутреннее исключение нового..

  • Не бросайте Exception, точнее.Если у фреймворка уже нет исключения для того, что вам нужно, сделайте его.

2 голосов
/ 23 июня 2010

Это зависит. Если вы намеревались только перебросить исключение, нет смысла включать его в попытку. Вы добавляете код, не предоставляя никакой реальной ценности. Если вы собираетесь что-то делать с исключением, регистрируете его, проверяете на наличие определенного типа и т. Д., Что отличается, поскольку вы собираетесь действовать в непредвиденном режиме.

Но я читал о влиянии try / catch производительность ..

Try catch - это не то, что действительно влияет на производительность, а создание исключения, которое является «дорогой» операцией. На самом деле это не так уж и плохо, и вам не следует избегать исключений из-за «затрат».

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

0 голосов
/ 23 июня 2010

Да, это то, что попробовать / поймать. Потеря контроля и риск перевести вашу базу данных в несогласованное состояние обойдутся вам дороже, чем попытка поймать. если есть исключение, то вообще не существует «дешевого» способа справиться с ситуацией ....

...