DA0007. Избегайте использования исключений для потока управления
Идентификатор правила |
DA0007 |
Категория |
Использование .NET Framework |
Методы профилирования |
Все |
Сообщение |
Постоянно генерируется большое число исключений. Рекомендуется сократить число используемых исключений в логике программы. |
Тип сообщения |
Предупреждение |
При профилировании методом выборки, памяти .NET или конфликтов ресурсов необходимо собрать не меньше 25 экземпляров, чтобы вызвать срабатывание правила.
Причина
В данных профилирование слишком большая частота вызова обработчиков исключений .NET Framework. Рекомендуется использовать другую логику потока управления для сокращения числа выдаваемых исключений.
Описание правила
Хотя использование обработчиков исключений для перехвата ошибок и других событий, нарушающих выполнение программы, похвально, использование обработчика исключений в составе логики обычного выполнения программы может оказаться затратным, и его следует избегать. В большинстве случаев исключения следует использовать только в ситуациях, которые происходят нечасто и не ожидаются. Исключения не следует использовать для возвращаемых значений в рамках типичного потока программы. Во многих случаях можно избежать возникновения исключений, проверяя значения и используя условную логику для остановки выполнения операторов, вызывающих проблему.
Дополнительные сведения см. в подразделе Управление исключениями раздела Chapter 5 — Improving Managed Code Performance в томе Improving .NET Application Performance and Scalability библиотеки Microsoft Patterns and Practices на сайте MSDN.
Анализ предупреждения
Дважды щелкните сообщение в окне со списком ошибок, чтобы перейти в представление Метки. Найдите столбец, содержащий показатели Исключения .NET CLR(@ProcessInstance)\число выданных исключений / сек. Установите, есть ли какие-либо этапы выполнения программы, на которых обработка исключений более интенсивная по сравнению с другими этапами. Используя профиль выборки, попытайтесь определить операторы throw и блоки try/catch, которые являются причиной частых исключений. При необходимости добавьте в блоки catch логику, которая поможет вам понять, какие исключения обрабатываются наиболее часто. Там, где это возможно, замените часто выполняемые операторы throw или блоки catch простой логикой управления потоком или кодом проверки.
Например, если обнаружилось, что приложение обрабатывало частые исключения DivideByZeroException, добавление в программу логики для проверки знаменателей с нулевыми значениями улучшит производительность приложения.