2. Оптимизация приложений
для Windows Store
Филипп Панфилов
f.panfilov@corp.mail.ru
@ponfius
3. Agenda
• Для чего заниматься оптимизацией
• Измерение и анализ производительности приложения
• Общие рекомендации по оптимизации приложений
• Правильный XAML и анимации
4. Для чего оптимизировать приложение?
Быстродействие
приложений
Удовлетворенность
пользователей
Время автономной работы
устройств
5. Когда оптимизировать приложение?
Разработка функции Проектирование
Оптимизация Разработка функции
Разработка Разработка функции Проектирование
приложения Оптимизация Разработка функции
Разработка функции Проектирование
Оптимизация Разработка функции
Оптимизация … Оптимизация
Релиз Релиз Релиз
7. Включение счетчиков fps
Время в UI потоке (мс)
Время в потоке Compositor (мс)
Количество пакетов, отправленных GPU
Использование памяти
fps UI потока
fps потока Compositor
App.Current.DebugSettings.EnableFrameRateCounter = true;
15. Общие рекомендации по оптимизации приложений
Ускорение загрузки приложения
Эффективная работа с файловой системой
16. Общие рекомендации по оптимизации приложений
Ускорение загрузки приложения
Эффективная работа с файловой системой
Прожорливый MediaElement
17. Общие рекомендации по оптимизации приложений
Ускорение загрузки приложения
Эффективная работа с файловой системой
Прожорливый MediaElement
Отзывчивый UI
18. Правильный XAML
Храните в памяти только Переиспользуйте
необходимые стили одинаковые кисти
Минимизируйте Для статичных
количество элементов и элементов используйте
число перерисовок BitmapCache
19. Запуск приложения
UI thread Compositor thread
1. Парсинг XAML 1. Настройка устройства
2. Верстка страницы 2. Преобразование кадра в
3. Передача в Compositor команды для железа
4. Выполнение кода 3. Передача команд железу
20. Правильные анимации
Independent анимации Dependent анимации
1. UI поток строит дерево анимации 1. UI поток строит дерево анимации
2. Поток Compositor исполняет 2. Каждый кадр анимации
анимацию компонуется в UI потоке и
передается в Compositor
3. Compositor отрисовывает каждый
кадр отдельно
22. Просчитывайте анимации
1. Производительность зависит от числа перерисованных пикселей
2. Лишние элементы в XAML – лишняя работа GPU
3. Для достижения 60 fps кадр должен успевать отрисоваться за 16 мс.
4. За это время на ARM устройствах экран успевает перерисоваться 3-4
раза