Category Archives: SQL

Обработка исключений и производительность

Недавно опять столкнулся с существенной потерей производительности при использовании блока:

while (reader.Read())
{
try
{
// операции с reader.GetValue()
}
catch
{
// выставление значений по умолчанию
}
}

В этом блоке операция чтения заключена в try блок, и при любых ошибках при чтении переменным присваиваются некие значения по умолчанию. Например, если в базе данных не задано значение поля, то reader вернет null. В этом случае вылетит исключение при обработке и действие перейдет в catch блок, где можно выставить, например, числовой “0”.

Так вот, если у Вас в базе некое поле с данными еще не забито значениями, то вышеописанный код будет работать в 10 раз медленнее! Обработка исключений не дается дешево. Чтоб заставить код работать быстро в любом случае, надо учесть случаи когда выпадают наиболее часто встречаемые исключения и поставить дополнительные проверки в блоке try. Например, проверить при чтении не вернул ли reader null и сразу подменить его неким разумным значением.