Diabeł tkwi w szczegółach Tworzenie wysokowydajnych aplikacji dla Windows Phone Michał Jankowski Starszy Inżynier Oprogramowania Tieto Poland Kamil Kowalski Starszy Inżynier Oprogramowania Tieto Poland
O nas
Kontakt z prelegentem Michał Jankowski Starszy Inżynier Oprogramowania | Tieto Poland mail: jankowski.m@gmail.com www: http://www.jankowskimichal.pl Kamil Kowalski mail: kamil.k.kowalski@gmail.com
Cel sesji Po sesji będziesz wiedział na co należy zwracać uwagę, przy pisaniu wydajnych aplikacji na Windows Phone 7
Plan prezentacji Krótki wstęp teoretyczny Przykłady, przykłady, przykłady Dyskusja
Teoria
Kryteria oceny aplikacji Satysfakcja Wygląd Funkcjonalność Niezawodność Płynność działania Cena
Najlepsze praktyki Optymalizacja to (prawie) zawsze pewnego rodzaju kompromis – koncentrujemy się na jednym aspekcie: szybkość działania, zużycie pamięci, rozmiar; kosztem pozostałych. Szybkość działania aplikacji sprawdzamy na telefonie – emulator WP jest szybszy niż telefon. Badając wydajność aplikacji stosujemy metody statystyczne – jednokrotne sprawdzenie szybkość działania nie jest miarodajne. Do pomiarów wydajności stosujemy klasę StopWatch. Kod pod szczególnym nadzorem – reguła 90 / 10, czyli: 90% czasu działania aplikacji zależy od 10% jej kodu Cel to znaleźć te 10% kodu i je zoptymalizować
Scenariusz 1 Konwersja obrazu na odcienie szarości
F(RGB -> Y) = 0,2125*czerwony + 0,7151*zielony + 0,0721*niebieski Studium przypadku Konwersja obrazu na odcienie szarości metodą bazującą na luminescencji: F(RGB -> Y) = 0,2125*czerwony + 0,7151*zielony + 0,0721*niebieski Sposób badania wydajności: warunki początkowe takie same dla każdego pomiaru, 1000 pomiarów, średnia arytmetyczna, odchylenie standardowe, testowane na różnych urządzeniach: Emulator 512 MB, Lumia 800, HTC PRO, HTC Mozart, HTC Titan, LG-C900.
Scenariusz 1 Demo
Pierwotna implementacja Obiektowość Czytelność Poprawnie napisany kod. Dobry podział na metody. Średnie czasy wykonywania: Emulator 512 MB 77,51 ms Lumia 800 298,34 ms HTC PRO 321,18 ms HTC Mozart 328,58 ms HTC Titan 278,73 ms LG-C900 338,04 ms
Dodawanie i mnożenie Lepiej dodawać niż mnożyć Zmiana kolejności pętli. Redukcja ilości obliczeń. Wersja pierwotna: 960 000 operacji dodawania, 960 000 operacji mnożenia. Wersja zmodyfikowana: 480 000 operacji dodawania, 600 operacji mnożenia.
Metody statyczne Poprawna deklaracja metod w obiekcie Dodanie słowa kluczowego static w deklaracji metody. Potencjalnie można metody te przenieść do osobnej klasy. Inną możliwością jest rozszerzenie klasy Color.
Na skróty Niektóre wyrażenia nie są optymalizowane Przechowywanie obiektów i wartości w polach lokalnych. Ilość przeskoków w pamięci zmniejszona z 961 202 do 0. Niektóre elementy nie są optymalizowane i za każdym razem są wyliczane.
Pętle Czasami niektóre operacje można zrobić prościej Zamiast dwóch pętli można wykorzystać jedną. Likwidacja indeksu pozycji pozwala zaoszczędzić: 480 000 operacji dodawania, 600 operacji mnożenia.
Operacje bitowe i liczby całkowite Arytmetyka liczb całkowitych Przesunięcie vs. dzielenie Usunięcie niepotrzebnych operacji. Działania na liczbach całkowitych. Świadomość działania przykładów zaczerpniętych z Internetu. Precyzja - czy zawsze potrzebujemy bardzo dokładnych wyników? Zrozumienie mechanizmów występujących na platformie.
Nadmiarowa obiektowość i typ byte Kod wydajny nie zawsze jest czytelny Usunięcie zbędnych konwersji typów. Odpowiednie typy liczb całkowitych. Liczby typu byte są rozszerzane do int przed wykonaniem na nich operacji. Następnie wykonywane jest działanie. Na koniec z powrotem dokonywana jest konwersja do byte.
Podsumowanie optymalizacji Programiści przyzwyczaili się do wydajności platformy desktopowej. W przypadku urządzeń mobilnych trzeba zmienić sposób myślenia. Proste zmiany mogą wielokrotnie przyspieszyć działanie aplikacji. Średnie czasy wykonywania: Emulator 512 MB 77,51 ms -> 5,65 ms Lumia 800 298,35 ms -> 21,97 ms HTC PRO 321,18 ms -> 29,63 ms HTC Mozart 328,56 ms -> 29,86 ms HTC Titan 278,73 ms -> 21,01 ms LG-C900 338,04 ms -> 30,10 ms
Scenariusz 2 Wyszukiwanie kontaktów
Studium przypadku Wyszukiwanie kontaktów poprzez asynchroniczną metodę WP SDK SearchAsync a następnie tworzenie modelu do wykorzystania w aplikacji Sposób badania wydajności: warunki początkowe takie same dla każdego pomiaru – ponad 3000 kontaktów, 20 pomiarów, średnia arytmetyczna, odchylenie standardowe, testowane na różnych urządzeniach: Lumia 800, HTC PRO, HTC Mozart, HTC Titan, LG-E900.
Scenariusz 2 Demo
Pierwotna implementacja Profesjonalny Czytelny Obiektowy napisany kod korzystający z LINQ, stworzony wg. zalecanych wzorców. Średnie czasy wykonywania: Lumia 800 14 111,76 ms HTC PRO 18 790,90 ms HTC Mozart 19 051,95 ms HTC Titan 14 123,95 ms LG-E900 18 827,45 ms
Zdrowy rozsądek Wygoda programisty A wydajność Nowe elementy języka bardzo często wprowadzają dodatkowy narzut. Uproszczenie algorytmu: to samo, ale prościej i krócej. Płytkie kopiowanie tablicy. Pętla for zamiast LINQ i foreach.
Cache vs dynamiczne doczytywanie danych Pomysł Cache Spojrzenie na problem z innej strony. Kod wykorzystujący mechnizm cache’owania, aby uzyskać aplikację reagującą na akcje użytkownika. Nie wszystko da się zoptymalizować.
Podsumowanie optymalizacji Redefinicja problemu pozwala na znalezienie alternatywnych rozwiązań. Kod dostosowany do wydajności platformy. Analiza zmienności danych może być podstawą do zmiany sposobu myślenia. Średnie czasy wykonywania: Lumia 800 14 111,76 ms -> 501,1 ms HTC PRO 18 790,90 ms -> 585,3 ms HTC Mozart 19 051,95 ms -> 507,4 ms HTC Titan 14 123,95 ms -> 602,6 ms LG-E900 18 827,45 ms -> 612,5 ms
Podsumowanie
Warto zapamiętać Program należy testować na jak największej ilości telefonów W momencie wyboru elementu do optymalizacji należy zastosować statystyczne podejście Wydajność aplikacji powinna być ważniejsza niż czytelność kodu Czasami warto zastanowić się nad zmianą definicji problemu: Zamiast Math.Sqrt(x*x+y*y) > 10 użyć x*x+y*y > 100
Dyskusja Materiały będą dostępne na stronie: http://www.jankowskimichal.pl/2012/10/mts-2012-materialy
Wypełnij ankietę i wygraj nagrody! 3/28/2017 5:07 AM Wypełnij ankietę i wygraj nagrody! Organizatorzy MTS czytają wszystkie ankiety. Dzięki nim masz realny wpływ na konferencję oraz merytorykę i prelegentów kolejnego MTS. Wystarczy 5 minut Twojego czasu na wypełnienie ankiety! Masz szansę wygrać m.in. wejściówkę na MTS 2013 (25x) oraz inne nagrody. Gdzie i jak? Ankiety dostępne są online – na stronie konferencji (konferencjamts.pl) Można je wypełnić od dziś, aż do 11 listopada 2012 © 2010 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.
Strefa Ekspertów (ATE) Strefa ATE dostępna jest w strefie Partnerów Zapraszamy wszystkich zainteresowanych poszerzeniem wiedzy Eksperci będą do Państwa dyspozycji Będziemy tam: 29.10.2012 12.30 – 13.30 30.10.2012 17.00 – 18.00
© 2012 Microsoft Corporation. Wszelkie prawa zastrzeżone. 3/28/2017 5:07 AM © 2012 Microsoft Corporation. Wszelkie prawa zastrzeżone. Microsoft, Windows oraz inne nazwy produktów są lub mogą być znakami towarowymi lub zastrzeżonymi znakami towarowymi firmy Microsoft w Stanach Zjednoczonych i innych krajach. Zamieszczone informacje mają charakter wyłącznie informacyjny. FIRMA MICROSOFT NIE UDZIELA ŻADNYCH GWARANCJI (WYRAŻONYCH WPROST LUB DOMYŚLNIE), W TYM TAKŻE USTAWOWEJ RĘKOJMI ZA WADY FIZYCZNE I PRAWNE, CO DO INFORMACJI ZAWARTYCH W TEJ PREZENTACJI. © 2010 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.