лучшие практики обеспечения производительности windows

advertisement
msdevcon.ru
#msdevcon
ЛУЧШИЕ ПРАКТИКИ ОБЕСПЕЧЕНИЯ
ПРОИЗВОДИТЕЛЬНОСТИ WINDOWS
STORE ПРИЛОЖЕНИЙ
Станислав Павлов
Microsoft
Производительность
Визуальная
как пользователь ощущает скорость работы приложения
Реальная
формальные параметры: CPU, память, диск, сеть, батарейка
Визуальная производительность
Планирование UI и UX
Асинхронное программирование
перестать, наконец, блокировать UI поток
Анимация процесса ожидания
Реальная производительность
Правильно построенный процесс
Понимание архитектуры работы и выбранного
технологического стека
Использование подходящего инструментария
Зачем это нужно?
Не будут пользоваться приложением
Которое медленно запускается
Которое медленно реагирует на действия пользователя
Которое показывает анимацию рывками
Которое воспроизводит мультимедиа рывками
Которое тратит батарейку
Правильно построенный процесс
Учёт производительности на каждом этапе разработки
планирование, дизайн, разработка, тестирование
Чётко поставленные цели по измеряемым параметрам
Итеративное улучшение производительности
Тестирование приложений на целевых устройствах
Исследование, исправление, измерение
Технологические варианты
XAML и C#/C++/VB.NET
HTML и JS
DirectX и С++
XAML архитектура
Полностью переписана на С++ поверх DirectX
Мульти-поточная архитектура с улучшенной поддержкой
многоядерности
потоки UI, Compositor, Worker
XAML инструментарий
DebugSettings
EnableFrameRateCounter
IsOverdrawHeatMapEnabled
Visual Studio Performance Analyzer
xperf
HTML архитектура
Используется движок Internet Explorer
WWA (Windows Web Applications)
Ограничения по безопасности
Взаимодействие с платформой (WinRT)
WinJS
HTML инструментарий
Visual Studio Performance Analyzer
Visual Studio JavaScript Profiler
Memory
UI Responsiveness
HTML5 Performance Analyzer
xpref
DirectX архитектура
Все Windows Store приложения используют DirectX для
рендеринга
WWA и XAML оптимизированы для использования
Dirext2D и Direct3D 11.1
Direct2D и эффекты Direct2D полностью используют
возможности Direct3D 11.1
DirectX инструментарий
Встроенный в Visual Studio Performance Analyzer
Graphics Diagnostics
GPUView
xpref
А теперь подробнее о XAML
Три потока XAML
UI
пользовательский код, парсер, размещение (layout), рендеринг
Compositor
независимая анимация, построение сцены, взаимодействие с графической
подсистемой
Worker
декодирование картинок, фоновая работа, асинхронный ввод/вывод …
XAML операции разбиты на фреймы
UI работает сравнительно медленно
размещает «dirty» элементы
парсит XAML для всех создаваемых объектов
рендерит видимые объекты в примитивы
Поток рендеринга работает на 60 FPS
обновляет значений анимации
вызывает команды отрисовки для примитивов
реализует независимую анимацию
Запуск XAML приложения
UI поток
парсит
размещает
рендерит
запускает код приложения
Возможные оптимизации
Уменьшить размер словарей ресурсов XAML
Уменьшить количество элементов
Использовать виртуализацию UI
Асинхронные запросы к веб-ресурсам
На что смотреть
Microsoft-Windows-Immersive-Shell
PerfTracker_SplashScreen_AppShown
Microsoft-Windows-XAML
ParseXAML
Frame
Layout
MeasureElement
Анимация
Зависимые
Дерево анимаций создаёт UI поток
Каждый кадр анимации генерируется в потоке UI и отсылается отдельно в
Comositor
Compositor рендерит сцену
Независимые
Дерево анимаций создаёт UI поток
Compositor делает всё остальное
Возможные оптимизации
Использовать независимую анимацию
Останавливать или удалять анимацию, если она больше
не нужна или не видна
Использовать RenderTransforms вместо ширины, высоты
или других свойств связанных с отображением объекта
Подумайте (2 раза) перед тем как использовать
бесконечную анимацию
Что ещё можно оптимизировать?
Масштабирование
не двигайте объекты по событиям Pointers
используйте ScrollView
не занимайте UI поток
используйте меньше элементов
используйте placeholders
Что ещё можно оптимизировать?
Медиа
используйте полноэкранный режим без оверлея
напрямую устанавливайте размеры элемента MediaElement в
Windows.Current.Bounds
освобождайте медиапотоки
размещайте другие элементы рядом, а не поверх видео
не используйте анимацию во время проигрывания видео
используйте MediaElement.PosterSource
Что ещё можно оптимизировать?
Память
используйте виртуализацию
уменьшайте количество элементов
всегда используйте изображения нужного размера
performance performance performance
msdevcon.ru
#msdevcon
Контакты
Стас Павлов
Microsoft
stas.pavlov@microsoft.com & @stasus
blogs.msdn.com/stasus
© 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of
Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Download