Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Пример сравнения эквивалентных алгоритмов, в которых возбуждение исключений соответственно используется или не используется
Пример сравнения эквивалентных алгоритмов, в которых возбуждение исключений соответственно используется или не используется
В листинге 7.4 представлен пример приложения, в котором сравниваются два алгоритма, решающие одну и ту же задачу, но значительно различающиеся между собой показателями производительности. Один алгоритм осуществляет сложение двух чисел и возвращает их сумму, а также булевское значение, которое указывает на знак результата — положительный или отрицательный. Другой алгоритм также складывает два числа и возвращает результат, но если результат является отрицательным числом, возбуждается исключение. Как и следовало ожидать, алгоритм, в котором в процессе нормального выполнения приложения используется возбуждение исключений, по своей производительности разительно отличается в худшую сторону от алгоритма, в котором исключения не используются. Хотя в абсолютном смысле оба алгоритма paботают довольно быстро и выполняют 10000 итераций менее чем за 2,5 секунды, один из них работает более чем в 350 раз быстрее по сравнению с другим; в случае вычислений, в которых интенсивно используются циклы, это различие может иметь критическое значение.
Результаты выполнения тестовых вычислений на физическом устройстве Pocket PC без подключения отладчика представлены в табл. 7.1. Как следует из приведенных в этой таблице данных, алгоритм, в котором возбуждение и перехват исключений не используются, работает в несколько сотен раз быстрее. В нашем примере применяются очень простые алгоритмы и простой механизм возбуждения и перехвата исключений; процесс обработки исключений требует осуществления средой выполнения сравнительно небольшого объема операций по освобождению памяти и разворачиванию стека. Чрезвычайная простота выполняемых вычислений позволяет более отчетливо выявить влияние обработки исключений на производительность приложения. В зависимости от сложности алгоритма и объема работы, необходимой для обработки возбужденных исключений, мы будем получать различные результаты, но можно сделать один совершенно очевидный вывод накладные расходы на обработку часто возбуждаемых исключений могут оказаться значительными, так что использования исключений в условиях нормального выполнения кода следует избегать, если только на то нет особой необходимости.
Таблица 7.1. Сравнительные показатели производительности простого алгоритма, выполняемого с возбуждением исключений и без такового
Количество итераций | Время выполнения с возбуждением исключений (с) | Время выполнения без возбуждения исключений (с) | Во сколько раз быстрее работает алгоритм без возбуждения исключений |
---|---|---|---|
10000 | 0,006 | 2,202 | 367 |
10000 | 0,006 | 2,201 | 367 |
100000 | 0,061 | 22,716 | 372 |
100000 | 0,055 | 22,834 | 415 |
100000 | 0,055 | 22,995 | 418 |
Выполнение используемого в качестве примера приложения на эмуляторе Pocket PC иллюстрирует рис. 7.2.
Рис. 7.2. Пример выполнения приложения, позволяющего оценить влияние обработки исключений на показатели производительности
- Пример установочного скрипта
- Пример из практики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Пример 17-10. Блочный комментарий
- Примеры
- Генерирование исключений
- 2. Пример создания базового отношения в записи на псевдокоде
- 5.4. РЕКОМЕНДАЦИИ НАЧИНАЮЩИМ ПО СОСТАВЛЕНИЮ ОПИСАНИЙ АЛГОРИТМОВ И ЭВРОРИТМОВ