Upload
kuchinskaya
View
222
Download
3
Embed Size (px)
Citation preview
Agenda
• Для чего заниматься оптимизацией
• Измерение и анализ производительности приложения
• Общие рекомендации по оптимизации приложений
• Правильный XAML и анимации
Для чего оптимизировать приложение?
Быстродействие
приложений
Удовлетворенность
пользователей Время автономной работы
устройств
Когда оптимизировать приложение?
Разработка приложения
Оптимизация
Релиз
Разработка функции
Оптимизация
Релиз
Разработка функции
Оптимизация
Разработка функции
Оптимизация
…
Проектирование
Оптимизация
Релиз
Разработка функции
Проектирование
Разработка функции
Проектирование
Разработка функции
Измерение производительности приложений
Включение счетчиков fps
Включение счетчиков fps
fps потока Compositor
fps UI потока
Использование памяти
Количество пакетов, отправленных GPU
Время в потоке Compositor (мс)
Время в UI потоке (мс)
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
2. Верстка страницы
3. Передача в Compositor
4. Выполнение кода
1. Настройка устройства
2. Преобразование кадра в команды для железа
3. Передача команд железу
Правильные анимации
Independent анимации Dependent анимации
1. UI поток строит дерево анимации
2. Поток Compositor исполняет анимацию
1. UI поток строит дерево анимации
2. Каждый кадр анимации компонуется в UI потоке и передается в Compositor
3. Compositor отрисовывает каждый кадр отдельно
Правильные анимации (2)
Можно анимировать Нельзя анимировать
• Canvas.Left, Canvas.Top
• UIElement.Opacity
• SolidColorBrush.Color
• RenderTransform
• Projection
• Width ScaleTransform.ScaleX
• Height ScaleTransform.ScaleY
• WebView WebViewBrush
Просчитывайте анимации
1. Производительность зависит от числа перерисованных пикселей
2. Лишние элементы в XAML – лишняя работа GPU
3. Для достижения 60 fps кадр должен успевать отрисоваться за 16 мс.
4. За это время на ARM устройствах экран успевает перерисоваться 3-4 раза
Филипп Панфилов
р а з р а б о т ч и к , П о ч т а @ 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