SlideShare a Scribd company logo
Panfilov
Оптимизация приложений
   для Windows Store

                 Филипп Панфилов
                 f.panfilov@corp.mail.ru
                 @ponfius
Agenda
• Для чего заниматься оптимизацией
• Измерение и анализ производительности приложения
• Общие рекомендации по оптимизации приложений
• Правильный XAML и анимации
Для чего оптимизировать приложение?

 Быстродействие
 приложений
                           Удовлетворенность
                             пользователей
 Время автономной работы
 устройств
Когда оптимизировать приложение?
               Разработка функции    Проектирование
                  Оптимизация       Разработка функции

  Разработка   Разработка функции    Проектирование
 приложения       Оптимизация       Разработка функции
               Разработка функции    Проектирование
                  Оптимизация       Разработка функции

 Оптимизация           …               Оптимизация

    Релиз           Релиз                Релиз
Измерение производительности приложений
 Включение счетчиков fps
Включение счетчиков fps

                                             Время в UI потоке (мс)
                                    Время в потоке Compositor (мс)
                             Количество пакетов, отправленных GPU
                                            Использование памяти
                                                      fps UI потока
                                             fps потока Compositor


App.Current.DebugSettings.EnableFrameRateCounter = true;
Измерение производительности приложений
 Включение счетчиков fps


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




App.Current.DebugSettings.IsOverdrawHeatMapEnabled = true;
Измерение производительности приложений
 Включение счетчиков fps


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


 Использование профайлера
Использование профайлера
Использование профайлера
Общие рекомендации по оптимизации приложений

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




                                                    Конструктор
Парсинг XAML         App()     App.OnLaunched()
                                                  первой страницы
Общие рекомендации по оптимизации приложений

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

Эффективная работа с файловой системой
Общие рекомендации по оптимизации приложений

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

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

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

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

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

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

Отзывчивый UI
Правильный XAML

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



   Минимизируйте              Для статичных
количество элементов и    элементов используйте
  число перерисовок            BitmapCache
Запуск приложения
UI thread                    Compositor thread
1.   Парсинг XAML            1. Настройка устройства
2.   Верстка страницы        2. Преобразование кадра в
3.   Передача в Compositor      команды для железа
4.   Выполнение кода         3. Передача команд железу
Правильные анимации
Independent анимации                 Dependent анимации
1. UI поток строит дерево анимации   1. UI поток строит дерево анимации
2. Поток Compositor исполняет        2. Каждый кадр анимации
   анимацию                             компонуется в UI потоке и
                                        передается в Compositor
                                     3. Compositor отрисовывает каждый
                                        кадр отдельно
Правильные анимации (2)
Можно анимировать             Нельзя анимировать
•   Canvas.Left, Canvas.Top   •   Width     ScaleTransform.ScaleX
•   UIElement.Opacity         •   Height    ScaleTransform.ScaleY
•   SolidColorBrush.Color     •   WebView      WebViewBrush
•   RenderTransform
•   Projection
Просчитывайте анимации
1.   Производительность зависит от числа перерисованных пикселей
2.   Лишние элементы в XAML – лишняя работа GPU
3.   Для достижения 60 fps кадр должен успевать отрисоваться за 16 мс.
4.   За это время на ARM устройствах экран успевает перерисоваться 3-4
     раза
Филипп Панфилов
разработчик, Почта@Mail.Ru
  f.panfilov@corp.mail.ru

More Related Content

Panfilov