'

23-24 мая, 2012 г. Microsoft

Понравилась презентация – покажи это...





Слайд 0

23-24 мая, 2012 г. Microsoft


Слайд 1

Повышаем производительность Windows Phone приложений АЛЕКСАНДР КРАКОВЕЦКИЙ @msugvnua | wp7rocks.com | msug.vn.ua | devrain.com Руководитель DevRain Solutions Microsoft MVP, Regional Director, PhD.


Слайд 2

содержание доклада Работа с XAML и элементами управления. Работа с изображениями. Оптимизация времени старта приложений и работа с памятью. Оптимизация для платформы с 256 Мб памяти. Инструменты профилирования и счетчики.


Слайд 3

Часть 1 Работа с XAML и элементами управления


Слайд 4

Потоковая модель Threads


Слайд 5

XAML Используйте как можно более простой XAML код. Сведите к минимуму использование Converters, особенно в связке со сценариями data binding. Избегайте цветовые анимации, а также элемента управления Popup (загружается в основном потоке). Создание элементов управления в коде быстрее чем XAML + data binding. Освободите UI поток от дополнительной работы!!!


Слайд 6

Pivot или Panorama? У Pivot загружается три панели – предыдущая, текущая и следующая. Panorama загружает все панели и весь контент одновременно. http://create.msdn.com/en-US/education/quickstarts/Panorama_and_Pivot_Controls


Слайд 7

Избегайте Callbacks Callbacks у этих классов выполняются в основном потоке: GeoCoordinateWatcher BackgroundWorker WebClient (7.0) Детали: http://blogs.msdn.com/b/jaimer/archive/2010/11/11/geocoordinatewatcher-tips-part1.aspx


Слайд 8

WebClient var client = new WebClient(); client.DownloadStringCompleted += (sender, e) => { }; client.DownloadStringAsync(new Uri(“url”)) WebClientSampleText.Text = e.Result; UI thread background thread Детальнее на: http://blogs.msdn.com/b/slmperf/archive/2011/06/21/webclient-change-for-mango-how-it-impacts-your-application.aspx


Слайд 9

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);


Слайд 10

ListView и «ленивая» загрузка Процесс прокрутки включает: разбор (парсинг) XAML; генерация объектов; загрузка и декодирование изображений.


Слайд 11

ListView и «ленивая» загрузка Что делать: использовать StackPanel если список небольшой; использовать LongListSelector; использовать задержку во время прокрутки; использовать сторонние компоненты: Lazy List, DeferredLoadListBox, Telerik Rad Controls: RadListBox


Слайд 12

Opacity и Visibility При любом изменении значения Visible Silverlight перерисует страницу полностью. Если установить Opacity равным 0 при включенном битмап кэшировании CacheMode = Media.BitmapCache, то Silverlight закэширует элемент управления.


Слайд 13

Progress bar Стандартный ProgressBar имеет проблемы с производительностью (http://www.jeff.wilcox.name/2010/08/performanceprogressbar/). Используйте PerformanceProgressBar (автор - Jeff Wilcox) вместо стандартного. В данный момент входит в Silverlight Toolkit for Windows Phone (http://silverlight.codeplex.com/). Также в Mango появился SystemTray.ProgressBar.


Слайд 14

SystemTray.ProgressBar <phone:PhoneApplicationPage shell:SystemTray.IsVisible="True" shell:SystemTray.Opacity=".8"> <shell:SystemTray.ProgressIndicator> <shell:ProgressIndicator IsIndeterminate="True" Text="Loading..." /> </shell:SystemTray.ProgressIndicator> </phone:PhoneApplicationPage> ProgressIndicator pi = Microsoft.Phone.Shell.SystemTray.ProgressIndicator; pi.IsVisible = true;


Слайд 15

Ограничения на размер контролов Элементы управления должны быть не больше чем 2048х2048 пикселей. ScrollableTextBox http://www.wp7rocks.com/2011/06/textblock-windows-phone-7.html


Слайд 16

Эмулятор vs. устройство


Слайд 17

Сериализация и десериализация Сравнение: DataContractJSONSerializer JSON.NET XmlSerlializer Binary serialization


Слайд 18

Сериализация и десериализация Вывод: бинарная сериализация самая быстрая.


Слайд 19

Часть 2 Работа с изображениями


Слайд 20

Стартовый экран Если приложение загружается больше 1 секунды, то показывается splash экран (jpeg 480 x 800px). Не поддерживает анимацию Создание анимированного экрана http://www.wp7rocks.com/2011/10/wp7.html


Слайд 21

Content vs. Resource // Content: <Image Source="/images/1.png"/> // Resource: <Image Source="/WP7Sample;component/images/1.png"/>


Слайд 22

Content vs. Resource Content изображения добавляются в *.xap как обыкновенные файлы. Resource файлы встраиваются непосредственно в библиотеку (*.dll). Выводы: используйте изображения как Content для оптимизации времени старта приложения, используйте Resource для быстрого доступа изображений после инициализации приложения.


Слайд 23

Общие рекомендации JPEG декодер работает быстрее чем PNG декодер. Используйте CreateOptions = BackgroundCreation для загрузки изображений в фоновом потоке. <Image Source="{Binding MediaUrl}" /> <Image> <Image.Source> <BitmapImage UriSource="{Binding MediaUrl}“ CreateOptions="BackgroundCreation"/> </Image.Source> </Image> Максимальный размер изображений: 2000х2000px.


Слайд 24

Кэширование и дэкодирование // 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);


Слайд 25

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


Слайд 26

Часть 3 Оптимизация времени старта приложений и работы с памятью


Слайд 27

Локализация, отдельные сборки Если вы хотите локализировать приложение, то не включайте все языковые ресурсы в одну сборку. Лучше разбейте их на отдельные библиотеки. Как создавать локализированные приложения: http://msdn.microsoft.com/en-us/library/ff637520%28v=VS.92%29.aspx. Пример загрузки страницы из другой библиотеки: NavigationService.Navigate( new Uri("/ExternalAssembly;component/Page.xaml", UriKind.Relative) );


Слайд 28

динамическая загрузка библиотек Динамическая загрузка DataGrid если элемент управления не используется при старте; DataGrid не является стандартным элементом управления; 144KB экономии при старте. Асинхронная загрузка S.W.Controls.Data.Dll Загружаем dll Создаем контрол в отдельном методе (CLR not to JIT inline)


Слайд 29

Часть 4 Оптимизация для платформы с 256 МБ


Слайд 30

public static class LowMemoryHelper { public static bool IsLowMemDevice { get; set; } static LowMemoryHelper() { try { Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit"); IsLowMemDevice = result < 94371840L; } catch (ArgumentOutOfRangeException) { // Windows Phone OS update not installed, which indicates a 512-MB device. IsLowMemDevice = false; } } } Windows Phone SDK 7.1.1 и Tango Проверка Tango устройства


Слайд 31

Ограничения Tango Не поддерживается: управление подписками на подкасты и их просмотр; Bing Local Scout; автоматическая загрузка фото в SkyDrive, но это можно будет сделать вручную; воспроизведение некоторых HD видеороликов из-за отсутствия соответствующих кодеков + ограничения на битрейт; фоновые агенты (Background agents).


Слайд 32

<m:Map xmlns:m="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> <m:Map xmlns:m="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" IsHitTestVisible="False" /> Bing Maps Способ оптимизации


Слайд 33

var bingMapsTask = new BingMapsTask(); // Omit the Center property to use the user's current location. // bingMapsTask.Center = new GeoCoordinate(47.6204, -122.3493); bingMapsTask.ZoomLevel = 2; bingMapsTask.Show(); var webBrowserTask = new WebBrowserTask(); webBrowserTask.Uri = new Uri("http://msdn.microsoft.com", UriKind.Absolute); webBrowserTask.Show(); Tasks Используйте BingMapsTask и WebBrowserTask


Слайд 34

RootFrame = new TransitionFrame(); <toolkit:TransitionService.NavigationInTransition> <toolkit:NavigationInTransition> <toolkit:NavigationInTransition.Backward> <toolkit:TurnstileTransition Mode="BackwardIn"/> </toolkit:NavigationInTransition.Backward> <toolkit:NavigationInTransition.Forward> <toolkit:TurnstileTransition Mode="ForwardIn"/> </toolkit:NavigationInTransition.Forward> </toolkit:NavigationInTransition> </toolkit:TransitionService.NavigationInTransition> <toolkit:TransitionService.NavigationOutTransition> … </toolkit:TransitionService.NavigationOutTransition> Page transitions ~12 МБ, ~17 МБ (пик)


Слайд 35

RootFrame = new PhoneApplicationFrame(); if (LowMemoryHelper.IsLowMemDevice) { RootFrame = new PhoneApplicationFrame(); } else { RootFrame = new TransitionFrame(); } Page transitions ~6 МБ, ~9 МБ (пик)


Слайд 36

А также… …обязательно используйте Memory Profiler. …подумайте над целесообразностью оптимизации под 256 мб устройства: можно просто запретить запуск приложения на таких устройствах.


Слайд 37

Часть 5 Инструменты профилирования и счетчики


Слайд 38

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 Пишем свой профайлер


Слайд 39

Coding4fun <MemoryCounter/> <coding4fun:MemoryCounter xmlns:coding4fun="clr-namespace:Coding4Fun.Phone.Controls;assembly=Coding4Fun.Phone.Controls"/> Детали: http://windowsphonegeek.com/articles/Passing-WP7-Memory-Consumption-requirements-with-the-Coding4Fun-MemoryCounter-tool


Слайд 40

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


Слайд 41

Frame rate counters Render Thread FPS. Число кадров в секунду для потока рендеринга. User Interface Thread FPS. Число кадров в секунду потока пользовательского интерфейса. Texture Memory Usage. Счётчик видеопамяти, используемой для хранения текстур. Surface Counter. Число поверхностей, отправленных на графический ускоритель. Intermediate Texture Count. Число промежуточных текстур. Screen Fill Rate. Число полностью закрашенных экранов на каждый кадр.


Слайд 42

frame rate counters


Слайд 43

Windows Phone Memory Profiler


Слайд 44

Windows Phone Marketplace Test Kit Открываем Marketplace Test Kit. В списке Monitored Tests увидим тест Peak Memory Consumption. Запускаем приложение. Тестируем весь функционал, закрываем приложение.


Слайд 45

Silverlight For Windows Phone Performance Демонстрация Демонстрация


Слайд 46

Полезные материалы http://wp7rocks.com http://channel9.msdn.com http://windowsphonegeek.com http://create.msdn.com


Слайд 47

Полезные материалы Разработка WP приложений на устройствах с 256 мб памяти http://www.wp7rocks.com/2012/03/wp-256.html Memory Profiling в Windows Phone приложениях http://www.wp7rocks.com/2012/02/memory-profiling-windows-phone.html Image Tips for Windows Phone 7 http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx Performance Considerations in Applications for Windows Phone http://msdn.microsoft.com/en-us/library/ff967560%28v=vs.92%29.aspx


Слайд 48

Полезные материалы Windows Phone 7: Performance Monitoring http://www.silverlightshow.net/items/Windows-Phone-7-Performance-Monitoring.aspx Improve Performance on Your Windows Phone 7 Apps. Totally http://codetrek.wordpress.com/2011/03/27/performance-totally/ Performance of Windows Phone 7 Applications http://www.codeproject.com/Articles/142998/Performance-of-Windows-Phone-7-Applications Techniques for memory analysis of Windows Phone apps http://www.developer.nokia.com/Community/Wiki/Techniques_for_memory_analysis_of_Windows_Phone_apps


Слайд 49

Иконки Transition Roles Building Organization Moving Up Problem Solving Solutions Boxed In Outside The Box Direction Management Difficult Road Decisions Timing Chemistry Give and Take Broadcast Cloud At Home Entertainment


Слайд 50

Иконки WiFi Storage Hubs Computing Database Data Transfer IT Infrastructure IT Infrastructure IT Infrastructure Synergy Debug Virtualization Innovation Data Security Positioning The Target Strategy Growth


Слайд 51

Иконки Marketplace Security/Privacy Balance ID Payment Email Global Places Phone Cloud Devices NUI Time Animation Games Gaming Strategy Timing Brain


Слайд 52

Иконки Innovation Strategy Vacation Merge/Vise Home Travel TV Office Xbox Plug In Tools Fix Remake Drive/Nail Build/Wall Cut Leak Calendar


Слайд 53

Иконки Cloud Comp Passion Role/Position I have a quote for you, I think... PC Tweet Message Mail Photos Messenger Video Devices Outlook TV PC/LAPTOP KINECT WEB


Слайд 54

Иконки IW/SQL/SYSTEM CENTER OFFICE WINDOWS PHONE WINDOWS CLOUD CONFIDENTIALITY 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


Слайд 55

Иконки Еще метро-иконки: http://templarian.com/project_windows_phone_icons/ Windows 8 Check the Segoe UI Symbol Font


Слайд 56

— 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 we’ve updated the SkyDrive web experience. Today, we are delivering new capabilities for SkyDrive across the Windows platform.


Слайд 57

Magic happens here


Слайд 58

Sometimes you just want to smile. ?


Слайд 59

Контакты АЛЕКСАНДР КРАКОВЕЦКИЙ @msugvnua | wp7rocks.com | msug.vn.ua | devrain.com Руководитель DevRain Solutions Microsoft MVP, Regional Director, PhD. Контакты


Слайд 60

Доступна сегодня на: http://vs11.ru Новая версия Visual Studio!


Слайд 61

Полезные материалы http://signalr.net/ https://github.com/signalr


Слайд 62

Связанные сессии WEB202 ASP.NET for Mobile and Slate Devices IOP201 Windows Azure and Open Source Solutions


Слайд 63

Пожалуйста Оцените доклад и мастерство докладчика Форма для оценки находится в вашем инфопакете


Слайд 64


×

HTML:





Ссылка: