Шрифт:
Анализ описанных выше шагов последовательной оптимизации
Обычно в тонкой настройке алгоритмов таятся значительные резервы. Самое важное при этом — это контролировать, обеспечивает ли выполнение настройки выигрыш в производительности, на который вы рассчитывали. Некоторыми своими "усовершенствованиями" вы можете непреднамеренно ухудшить производительность из-за того, что с ними связано распределение памяти, о котором вы можете не знать, или в силу каких-либо других причин. В процессе разработки приведенного выше кода у меня несколько раз возникали ситуации, когда я считал, что вносимые изменения должны улучшить результаты, но после проведения соответствующих измерений и при более глубоком рассмотрении оказывалось, что эти изменения приносили только вред. Всегда измеряйте показатели производительности и проводите их сравнительный анализ для различных вариантов реализации!
Кроме того, очень важно проводить тестирование на фактическом оборудовании, для которого предназначено ваше приложение, чтобы лучше почувствовать реальные условия работы с ним "на устройстве". Эмуляторы очень удобно использовать в процессе проектирования и базовой настройки приложения, но результаты, полученные на физическом устройстве, могут быть другими из-за различий в свойствах процессоров, памяти и других факторов. Одни программы могут выполняться на физических устройствах быстрее, другие — медленнее. Последнее слово всегда остается за фактическим оборудованием, которое будут использовать конечные пользователи. По тем же причинам очень важно измерять производительность при выполнении программы с подключенным отладчиком и без него. В некоторых случаях подключение отладчика резко снижает производительность.
Результаты тестирования трех различных алгоритмов, обсуждаемых нами, представлены в таблицах 8.1 и 8.2.
Таблица 8.1. Результаты тестирования алгоритмов (в секундах) на эмуляторе Pocket PC с вычислением 8000 циклов
Порядковый номер теста | Неэкономное распределение памяти | Незначительное уменьшение объема распределяемой памяти | Значительное уменьшение объема распределяемой памяти |
---|---|---|---|
1 | 12,65 | 12,2 | 8,925 |
2 | 12,775 | 12,35 | 8,55 |
3 | 12,575 | 12,25 | 8,225 |
4 | 12,625 | 12,525 | 8,575 |
Среднее | 12,65625 | 12,33125 | 8,56875 |
Экономия времени по сравнению с базовым уровнем | 0% | 2,57% | 32,30% |
Таблица 8.2. Результаты тестирования алгоритмов (в секундах) на физическом устройстве Pocket PC с вычислением 2000 циклов
Порядковый номер теста | Неэкономное распределение памяти | Незначительное уменьшение объема распределяемой памяти | Значительное уменьшение объема распределяемой памяти |
---|---|---|---|
1 | 30,609 | 30,151 | 20,484 |
2 | 30,538 | 30,016 | 20,362 |
3 | 30,517 | 30,195 | 20,377 |
4 | 30,457 | 30,316 | 20,429 |
Среднее | 30,53025 | 30,1695 | 20,413 |
Экономия времени по сравнению с базовым уровнем | 0% | 1,18% | 33,14% |