DevCon12 // msdevcon.ru #msdevcon мая, 2012 г. Microsoft
// DevCon12 Повышаем производительность Windows Phone приложений АЛЕКСАНДР | wp7rocks.com | msug.vn.ua | devrain.com Руководитель DevRain Solutions Microsoft MVP, Regional Director, PhD.
содержание доклада Работа с XAML и элементами управления. Работа с изображениями. Оптимизация времени старта приложений и работа с памятью. Оптимизация для платформы с 256 Мб памяти. Инструменты профилирования и счетчики.
#msdevcon Часть 1 Работа с XAML и элементами управления
Потоковая модель OS Operating system compositing and overlays Compositor Smooth animations for bitmap cached elements Touch Touch responsiveness thread Data binding. Rasterizing. Events. Very busy! UI App parsing logic, long-running tasks, etc. Background Threads
XAML Используйте как можно более простой XAML код. Сведите к минимуму использование Converters, особенно в связке со сценариями data binding. Избегайте цветовые анимации, а также элемента управления Popup (загружается в основном потоке). Создание элементов управления в коде быстрее чем XAML + data binding. Освободите UI поток от дополнительной работы!!!
Pivot или Panorama? У Pivot загружается три панели – предыдущая, текущая и следующая. Panorama загружает все панели и весь контент одновременно. US/education/quickstarts/Pa norama_and_Pivot_Controls
Избегайте Callbacks Callbacks у этих классов выполняются в основном потоке: GeoCoordinateWatcher BackgroundWorker WebClient (7.0) Детали: natewatcher-tips-part1.aspx natewatcher-tips-part1.aspx
WebClient var client = new WebClient(); client.DownloadStringCompleted += (sender, e) => { }; client.DownloadStringAsync(new Uri(url)) WebClientSampleText.Text = e.Result; UI thread background thread Детальнее на: rf/archive/2011/06/21/webclient -change-for-mango-how-it- impacts-your-application.aspx
HttpWebRequest var request = (HttpWebRequest)WebRequest.Create(new Uri(url)); request.BeginGetResponse(r => { var httpRequest = (HttpWebRequest)r.AsyncState; var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(r); using (var reader = new StreamReader(httpResponse.GetResponseStream())) { var response = reader.ReadToEnd(); Deployment.Current.Dispatcher.BeginInvoke(new Action(() => { responseTextBlock.Text = response; })); } }, request);
ListView и «ленивая» загрузка Процесс прокрутки включает: разбор (парсинг) XAML; генерация объектов; загрузка и декодирование изображений.
ListView и «ленивая» загрузка Что делать: использовать StackPanel если список небольшой; использовать LongListSelector; использовать задержку во время прокрутки; использовать сторонние компоненты: Lazy List, DeferredLoadListBox, Telerik Rad Controls: RadListBoxLazy List DeferredLoadListBoxTelerik Rad Controls: RadListBox
Opacity и Visibility При любом изменении значения Visible Silverlight перерисует страницу полностью. Если установить Opacity равным 0 при включенном битмап кэшировании CacheMode = Media.BitmapCache, то Silverlight закэширует элемент управления.
Progress bar Стандартный ProgressBar имеет проблемы с производительностью ( Используйте PerformanceProgressBar (автор - Jeff Wilcox) вместо стандартного. В данный момент входит в Silverlight Toolkit for Windows Phone ( Также в Mango появился SystemTray.ProgressBar.
SystemTray.ProgressBar ProgressIndicator pi = Microsoft.Phone.Shell.SystemTray.ProgressIndicator; pi.IsVisible = true;
Ограничения на размер контролов Элементы управления должны быть не больше чем 2048х2048 пикселей. ScrollableTextBox textblock-windows-phone-7.html textblock-windows-phone-7.html
Эмулятор vs. устройство
Сериализация и десериализация Сравнение: DataContractJSONSerializer JSON.NET XmlSerlializer Binary serialization
Сериализация и десериализация Вывод: бинарная сериализация самая быстрая.
#msdevcon Часть 2 Работа с изображениями
Стартовый экран Если приложение загружается больше 1 секунды, то показывается splash экран (jpeg 480 x 800px). Не поддерживает анимацию Создание анимированного экрана
Content vs. Resource // Content: // Resource:
Content vs. Resource Content изображения добавляются в *.xap как обыкновенные файлы. Resource файлы встраиваются непосредственно в библиотеку (*.dll). Выводы: используйте изображения как Content для оптимизации времени старта приложения, используйте Resource для быстрого доступа изображений после инициализации приложения.
Общие рекомендации JPEG декодер работает быстрее чем PNG декодер. Используйте CreateOptions = BackgroundCreation для загрузки изображений в фоновом потоке. Максимальный размер изображений: 2000х2000px.
Кэширование и дэкодирование // remove caching by code var bitmapImage = image.Source as BitmapImage; bitmapImage.UriSource = null; image.Source = null; // decoding to lower resolution image.Source = PictureDecoder.DecodeJpeg(jpgStream, 192, 256);
var uri = new Uri("LoadingLargeImages;component/Test3k3k.JPG", UriKind.Relative); var sri = Application.GetResourceStream(uri); var wb = new WriteableBitmap((int)this.image3k3k.Width, (int)this.image3k3k.Height); wb.LoadJpeg(sri.Stream); this.image3k3k.Source = wb; Работа с большими изображениями Класс WriteableBitmap и метод LoadJpeg
#msdevcon Часть 3 Оптимизация времени старта приложений и работы с памятью
Локализация, отдельные сборки Если вы хотите локализировать приложение, то не включайте все языковые ресурсы в одну сборку. Лучше разбейте их на отдельные библиотеки. Как создавать локализированные приложения: Пример загрузки страницы из другой библиотеки: NavigationService.Navigate( new Uri("/ExternalAssembly;component/Page.xaml", UriKind.Relative) );
динамическая загрузка библиотек Динамическая загрузка DataGrid если элемент управления не используется при старте; DataGrid не является стандартным элементом управления; 144KB экономии при старте. Асинхронная загрузка S.W.Controls.Data.Dll Загружаем dll Создаем контрол в отдельном методе (CLR not to JIT inline)
#msdevcon Часть 4 Оптимизация для платформы с 256 МБ
public static class LowMemoryHelper { public static bool IsLowMemDevice { get; set; } static LowMemoryHelper() { try { Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit"); IsLowMemDevice = result < L; } catch (ArgumentOutOfRangeException) { // Windows Phone OS update not installed, which indicates a 512-MB device. IsLowMemDevice = false; } Windows Phone SDK и Tango Проверка Tango устройства
Ограничения Tango Не поддерживается: управление подписками на подкасты и их просмотр; Bing Local Scout; автоматическая загрузка фото в SkyDrive, но это можно будет сделать вручную; воспроизведение некоторых HD видеороликов из-за отсутствия соответствующих кодеков + ограничения на битрейт; фоновые агенты (Background agents).
Bing Maps Способ оптимизации
var bingMapsTask = new BingMapsTask(); // Omit the Center property to use the user's current location. // bingMapsTask.Center = new GeoCoordinate( , ); bingMapsTask.ZoomLevel = 2; bingMapsTask.Show(); var webBrowserTask = new WebBrowserTask(); webBrowserTask.Uri = new Uri(" UriKind.Absolute); webBrowserTask.Show(); Tasks Используйте BingMapsTask и WebBrowserTask
RootFrame = new TransitionFrame(); … Page transitions ~12 МБ, ~17 МБ (пик)
RootFrame = new PhoneApplicationFrame(); if (LowMemoryHelper.IsLowMemDevice) { RootFrame = new PhoneApplicationFrame(); } else { RootFrame = new TransitionFrame(); } Page transitions ~6 МБ, ~9 МБ (пик)
А также… …обязательно используйте Memory Profiler. …подумайте над целесообразностью оптимизации под 256 мб устройства: можно просто запретить запуск приложения на таких устройствах.
#msdevcon Часть 5 Инструменты профилирования и счетчики
namespace Microsoft.Phone.Info { public static class DeviceStatus { public static long ApplicationCurrentMemoryUsage { get; } public static long ApplicationPeakMemoryUsage { get; } public static long ApplicationMemoryUsageLimit { get; } public static long DeviceTotalMemory { get; } } } // получаем лимит памяти на устройстве DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit") Microsoft.Phone.Info Пишем свой профайлер
Coding4fun Детали: the-Coding4Fun-MemoryCounter-toolhttp://windowsphonegeek.com/articles/Passing-WP7-Memory-Consumption-requirements-with- the-Coding4Fun-MemoryCounter-tool
if (System.Diagnostics.Debugger.IsAttached) { // Display the current frame rate counters. Application.Current.Host.Settings.EnableFrameRateCounter = true; // Show the areas of the app that are being redrawn in each frame. Application.Current.Host.Settings.EnableRedrawRegions = true; // Enable non-production analysis visualization mode, // which shows areas of a page that are handed off to GPU with a colored overlay. Application.Current.Host.Settings.EnableCacheVisualization = true; } Визуализация работы приложения Настройка в App.xaml.cs
Frame rate counters Render Thread FPS. Число кадров в секунду для потока рендеринга. User Interface Thread FPS. Число кадров в секунду потока пользовательского интерфейса. Texture Memory Usage. Счётчик видеопамяти, используемой для хранения текстур. Surface Counter. Число поверхностей, отправленных на графический ускоритель. Intermediate Texture Count. Число промежуточных текстур. Screen Fill Rate. Число полностью закрашенных экранов на каждый кадр.
frame rate counters
Windows Phone Memory Profiler
Windows Phone Marketplace Test Kit Открываем Marketplace Test Kit. В списке Monitored Tests увидим тест Peak Memory Consumption. Запускаем приложение. Тестируем весь функционал, закрываем приложение.
#msdevcon Silverlight For Windows Phone Performance Демонстрация
Полезные материалы
Полезные материалы Разработка WP приложений на устройствах с 256 мб памяти Memory Profiling в Windows Phone приложениях Image Tips for Windows Phone 7 Performance Considerations in Applications for Windows Phone
Полезные материалы Windows Phone 7: Performance Monitoring Improve Performance on Your Windows Phone 7 Apps. Totally Performance of Windows Phone 7 Applications Techniques for memory analysis of Windows Phone apps
Иконки Transition RolesBuildingOrganizationMoving Up Problem Solving Solutions Boxed In Outside The Box DirectionManagement Difficult RoadDecisions Timing Chemistry Give and Take Broadcast Cloud At Home Entertainment
Иконки WiFi StorageHubsComputingDatabase Data Transfer IT Infrastructure SynergyDebug Virtualization Innovation Data Security PositioningThe TargetStrategyGrowth
Иконки MarketplaceSecurity/Privacy BalanceIDPayment GlobalPlacesPhone Cloud DevicesNUITime AnimationGames GamingStrategy Timing Brain
Иконки InnovationStrategyVacationMerge/Vise Home Travel TVOfficeXboxPlug In ToolsFix RemakeDrive/Nail Build/Wall Cut Leak Calendar
Иконки Cloud CompPassion Role/Position I have a quote for you, I think... PC TweetMessage MailPhotosMessenger Video DevicesOutlookTV PC/LAPTOP KINECT WEB
Иконки IW/SQL/SYSTEM CENTER OFFICE WINDOWS PHONE WINDOWS CLOUDCONFIDENTIALITY OR SECURE 2 OPEN WEB PLATFORM RAPID GROWTH PRIVATE CLOUD DEVICES MARKETPLACE WEBSERVICE CROSS PLATFORM OPTIMIZED VIRTUALIZED SERVERS CACHING.NET.Visual Studio WEB SERVER STORAGE
Иконки Еще метро-иконки: Windows 8 Check the Segoe UI Symbol Font
Steve In February, we told you about our goals for connecting your apps, files, PCs, and devices to the cloud with SkyDrive and Windows 8. Since then, we have provided the App Preview of a Windows 8 app to access SkyDrive, and weve updated the SkyDrive web experience. Today, we are delivering new capabilities for SkyDrive across the Windows platform.
Magic happens here
Sometimes you just want to smile.
#msdevcon Контакты АЛЕКСАНДР | wp7rocks.com | msug.vn.ua | devrain.com Руководитель DevRain Solutions Microsoft MVP, Regional Director, PhD. Контакты
#msdevcon Доступна сегодня на: Новая версия Visual Studio!
Полезные материалы
Связанные сессии WEB202 ASP.NET for Mobile and Slate Devices IOP201 Windows Azure and Open Source Solutions
Пожалуйста Оцените доклад и мастерство докладчика Форма для оценки находится в вашем инфопакете
© 2012 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.