Monthly Archives: September 2007

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

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

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

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

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

“Подразумеваемое” в пользовательском интерфейсе

Нашел тут любопытную статью про УИ. Приведу особо заинтересовавший меня кусок:

13. В информационную структуру любого взаимодействия неявным образом включено «подразумеваемое» – правила, процедуры и способы, характерные для взаимодействий вообще либо для определенных классов (групп) взаимодействий.

14. К подразумеваемому относятся, в частности, правила, определяющие, что считать взаимодействием вообще; правила, процедуры и способы выбора цели; правила, процедуры и способы выбора участников взаимодействия.

15. Подразумеваемое есть нормативная часть взаимодействия. В общем виде подразумеваемое отвечает на вопрос «как здесь принято». Подразумеваемое есть ритуальная часть интерфейса.

16. Ритуал – стабильно повторяемая, характерная для данной культуры в целом или отдельной культурной общности последовательность обязательных действий (алгоритм), совершение которых в соответствии с существующими в культуре социальными ролями необходимо и достаточно для достижения заранее известной для данного ритуала цели.

17. Без учета подразумеваемого интерфейс будет заведомо малоэффективным или неработоспособным.

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

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

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