Panfilov
- 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 отрисовывает каждый
кадр отдельно
- 21. Правильные анимации (2)
Можно анимировать Нельзя анимировать
• Canvas.Left, Canvas.Top • Width ScaleTransform.ScaleX
• UIElement.Opacity • Height ScaleTransform.ScaleY
• SolidColorBrush.Color • WebView WebViewBrush
• RenderTransform
• Projection
- 22. Просчитывайте анимации
1. Производительность зависит от числа перерисованных пикселей
2. Лишние элементы в XAML – лишняя работа GPU
3. Для достижения 60 fps кадр должен успевать отрисоваться за 16 мс.
4. За это время на ARM устройствах экран успевает перерисоваться 3-4
раза