23

Panfilov

Embed Size (px)

Citation preview

Page 1: Panfilov
Page 2: Panfilov

Оптимизация приложений

для Windows Store

Филипп Панфилов [email protected]

@ponfius

Page 3: Panfilov

Agenda

• Для чего заниматься оптимизацией

• Измерение и анализ производительности приложения

• Общие рекомендации по оптимизации приложений

• Правильный XAML и анимации

Page 4: Panfilov

Для чего оптимизировать приложение?

Быстродействие

приложений

Удовлетворенность

пользователей Время автономной работы

устройств

Page 5: Panfilov

Когда оптимизировать приложение?

Разработка приложения

Оптимизация

Релиз

Разработка функции

Оптимизация

Релиз

Разработка функции

Оптимизация

Разработка функции

Оптимизация

Проектирование

Оптимизация

Релиз

Разработка функции

Проектирование

Разработка функции

Проектирование

Разработка функции

Page 6: Panfilov

Измерение производительности приложений

Включение счетчиков fps

Page 7: Panfilov

Включение счетчиков fps

fps потока Compositor

fps UI потока

Использование памяти

Количество пакетов, отправленных GPU

Время в потоке Compositor (мс)

Время в UI потоке (мс)

App.Current.DebugSettings.EnableFrameRateCounter = true;

Page 8: Panfilov

Измерение производительности приложений

Включение счетчиков fps

Отображение карты перерисовок

Page 9: Panfilov

Отображение карты перерисовок

App.Current.DebugSettings.IsOverdrawHeatMapEnabled = true;

Page 10: Panfilov

Измерение производительности приложений

Включение счетчиков fps

Отображение карты перерисовок

Использование профайлера

Page 11: Panfilov

Использование профайлера

Page 12: Panfilov

Использование профайлера

Page 13: Panfilov

Общие рекомендации по оптимизации приложений

Ускорение загрузки приложения

Page 14: Panfilov

Ускорение загрузки приложения

Парсинг XAML App() App.OnLaunched() Конструктор

первой страницы

Page 15: Panfilov

Общие рекомендации по оптимизации приложений

Ускорение загрузки приложения

Эффективная работа с файловой системой

Page 16: Panfilov

Общие рекомендации по оптимизации приложений

Ускорение загрузки приложения

Эффективная работа с файловой системой

Прожорливый MediaElement

Page 17: Panfilov

Общие рекомендации по оптимизации приложений

Ускорение загрузки приложения

Эффективная работа с файловой системой

Прожорливый MediaElement

Отзывчивый UI

Page 18: Panfilov

Правильный XAML

Храните в памяти только необходимые стили

Минимизируйте количество элементов и

число перерисовок

Переиспользуйте одинаковые кисти

Для статичных элементов используйте

BitmapCache

Page 19: Panfilov

Запуск приложения

UI thread Compositor thread

1. Парсинг XAML

2. Верстка страницы

3. Передача в Compositor

4. Выполнение кода

1. Настройка устройства

2. Преобразование кадра в команды для железа

3. Передача команд железу

Page 20: Panfilov

Правильные анимации

Independent анимации Dependent анимации

1. UI поток строит дерево анимации

2. Поток Compositor исполняет анимацию

1. UI поток строит дерево анимации

2. Каждый кадр анимации компонуется в UI потоке и передается в Compositor

3. Compositor отрисовывает каждый кадр отдельно

Page 21: Panfilov

Правильные анимации (2)

Можно анимировать Нельзя анимировать

• Canvas.Left, Canvas.Top

• UIElement.Opacity

• SolidColorBrush.Color

• RenderTransform

• Projection

• Width ScaleTransform.ScaleX

• Height ScaleTransform.ScaleY

• WebView WebViewBrush

Page 22: Panfilov

Просчитывайте анимации

1. Производительность зависит от числа перерисованных пикселей

2. Лишние элементы в XAML – лишняя работа GPU

3. Для достижения 60 fps кадр должен успевать отрисоваться за 16 мс.

4. За это время на ARM устройствах экран успевает перерисоваться 3-4 раза

Page 23: Panfilov

Филипп Панфилов

р а з р а б о т ч и к , П о ч т а @ M a i l . R u

f . p a n f i l o v @ c o r p . m a i l . r u