Xamarin Profiler

W tym przewodniku przedstawiono najważniejsze funkcje programu Xamarin Profiler. Analizuje profilery, profilowanie i kiedy należy ich używać, oraz w standardowym przepływie pracy profilowania aplikacji platformy Xamarin.

Powodzenie aplikacji zależy od środowiska użytkownika końcowego. Jako deweloper możesz zaimplementować kilka naprawdę niesamowitych funkcji w aplikacji, ale jeśli aplikacja jest powolna lub pełna awarii, użytkownik prawdopodobnie go pozby.

W przeszłości mono zawiera zaawansowany profiler wiersza polecenia do zbierania informacji o programach uruchomionych w środowisku uruchomieniowym Mono nazywanym profilerem dziennika Mono. Program Xamarin Profiler to graficzny interfejs profilera dzienników Mono i obsługuje profilowanie aplikacji dla systemów Android, iOS, tvOS i Mac na komputerach Mac, android, iOS i tvOS w systemie Windows.

Narzędzie Xamarin Profiler ma szereg instrumentów dostępnych do profilowania — alokacje, cykle i profiler czasu. W tym przewodniku przedstawiono miarę tych instrumentów, sposób analizowania aplikacji oraz objaśnianie znaczenia danych przedstawionych na każdym ekranie.

Ten przewodnik analizuje typowe scenariusze profilowania i wprowadza profilera jako narzędzie ułatwiające analizowanie i optymalizowanie aplikacji dla systemów iOS i Android.

Pobieranie i instalowanie

Uwaga

Aby odblokować tę funkcję w programie Visual Studio Enterprise w systemie Windows lub Visual Studio dla komputerów Mac na komputerze Mac, musisz być subskrybentem programu Visual Studio Enterprise.

Program Xamarin Profiler jest aplikacją autonomiczną i jest zintegrowany z Visual Studio dla komputerów Mac i programem Visual Studio w celu włączenia profilowania z poziomu środowiska IDE.

Pobierz pakiet instalacyjny dla swojej platformy:

Po pobraniu uruchom instalatora, aby dodać program Xamarin Profiler do systemu.

Profileery i profilowanie

Profilowanie jest ważnym i często pomijanym krokiem tworzenia aplikacji. Profilowanie jest formą dynamicznej analizy programu — analizuje program, gdy jest uruchomiony i używany. Profiler to narzędzie do wyszukiwania danych, które zbiera informacje o złożoności czasu, użyciu określonych metod i przydzielanej pamięci. Profiler umożliwia szczegółowe przechodzenie do szczegółów i analizowanie tych metryk, aby wskazać obszary problemów w kodzie.

Podczas projektowania i tworzenia aplikacji ważne jest, aby nie optymalizować przedwcześnie; oznacza to, że poświęcasz czas na opracowywanie kodu w obszarach, do których rzadko będzie uzyskiwany dostęp. Jest to moc profilowania. Profiler zapewnia wgląd w najczęściej używane części bazy kodu i pomaga zlokalizować obszary, w których należy poświęcić czas na wprowadzanie ulepszeń. Deweloperzy powinni dbać o to, gdzie większość czasu jest poświęcana w aplikacji i jak pamięć jest używana przez aplikację.

Profilowanie jest przydatne we wszystkich typach programowania, ale jest szczególnie istotne w tworzeniu aplikacji mobilnych. Niezoptymalizowany kod jest znacznie bardziej zauważalny na platformach mobilnych niż na komputerach stacjonarnych, a sukces aplikacji zależy od pięknego i zoptymalizowanego kodu, który działa wydajnie.

Xamarin Profiler

Program Xamarin Profiler udostępnia deweloperom sposób profilowania aplikacji z poziomu Visual Studio dla komputerów Mac lub Visual Studio. Profiler zbiera i wyświetla informacje o aplikacji, które następnie mogą być używane przez dewelopera do analizowania zachowania aplikacji. Istnieje wiele różnych sposobów profilowania aplikacji przy użyciu programu Xamarin Profiler, czyli profilowania pamięci i próbkowania statystycznego. Są one przeprowadzane odpowiednio za pomocą instrumentów Alokacje i Profiler czasu.

Obecnie profiler platformy Xamarin może służyć do testowania aplikacji Xamarin.iOS, Xamarin.Android i Xamarin.Mac na komputerach Mac (za pośrednictwem Visual Studio dla komputerów Mac). Profiler jest oddzielnym procesem od środowiska IDE, dlatego oprócz uruchamiania z Visual Studio dla komputerów Mac można go używać jako autonomicznej aplikacji do badania .exe i .mlpd plików utworzonych z profilera dziennika mono.

Obsługa profilera

Obsługa programu Xamarin Profiler jest dostępna na następujących platformach:

  • Visual Studio dla komputerów Mac (macOS z licencją enterprise)

    • Android
      • Urządzenie i emulator
    • Ios
      • Urządzenie i symulator
    • tvOS (Instrument czasu nie jest obsługiwany)
      • Urządzenie i symulator
    • Mac
  • Visual Studio (tylko wersja Enterprise )

    • Android
      • Urządzenie i emulator
    • iOS [eksperymentalny]
      • Urządzenie i symulator
    • tvOS
      • Urządzenie i symulator

Należy pamiętać, że można profilować tylko konfiguracje debugowania.

Profiler — podstawy

W tej sekcji przedstawiono części programu Xamarin Profiler i przedstawiono jego funkcje.

Zezwalaj na profilowanie w aplikacji

Zanim będzie można pomyślnie profilować aplikację, musisz zezwolić na profilowanie w obszarze Opcje projektu aplikacji.

  • iOS.

Kompilowanie > debugowania systemu > iOS — włączanie profilowania

iOS Options Dialog in Visual Studio for Mac

  • Android:

Kompilowanie > debugowania systemu > Android — włączanie instrumentacji dla deweloperów

Android Options Dialog in Visual Studio for Mac

Uruchamianie profilera

Profiler platformy Xamarin można uruchomić ze środowiska IDE podczas profilowania aplikacji systemu iOS lub Android albo jako aplikacji autonomicznej.

Uruchamianie z Visual Studio dla komputerów Mac

  1. Najpierw upewnij się, że aplikacja jest załadowana w Visual Studio dla komputerów Mac, a następnie wybierz (domyślną) konfigurację debugowania.
  2. Przejdź do sekcji Uruchamianie > profilowania startowegow Visual Studio dla komputerów Mac lub Analizuj > profiler platformy Xamarin w programie Visual Studio, aby otworzyć profilera, jak pokazano na poniższym diagramie:

Launching the Profiler from Visual Studio for Mac

Jeśli elementy menu nie są wyświetlane, zapoznaj się z przewodnikiem rozwiązywania problemów.

Spowoduje to uruchomienie profilera i automatyczne rozpoczęcie profilowania aplikacji.

Profiler może służyć do mierzenia pamięci i wydajności. Osiąga to za pośrednictwem instrumentów Alokacje i Profiler czasu, które szczegółowo omówimy w następnej sekcji.

Zapisywanie i ładowanie sesji profilera

Aby zapisać sesję profilowania w dowolnym momencie, wybierz pozycję Plik > Zapisz jako... na pasku menu Profilera. Spowoduje to zapisanie pliku w formacie mlpd , specjalnym, wysoce skompresowanym formacie profilowania danych.

Po zainstalowaniu programu Xamarin Profiler można znaleźć w folderze Aplikacje, jak pokazano na poniższym zrzucie ekranu:

Open standalone Profiler from Mac

Pliki mlpd można załadować do profilera, otwierając autonomiczną aplikację, wybierając pozycję Wybierz element docelowy i ładując plik.

Aby uzyskać więcej informacji, zobacz Generowanie plików mlpd.

Funkcje profilera

Program Xamarin Profiler składa się z pięciu sekcji, jak pokazano poniżej:

  • Pasek narzędzi — znajdujący się w górnej części profilera, oferuje opcje uruchamiania/zatrzymywania profilowania, wybieranie procesu docelowego, wyświetlanie czasu działania aplikacji i wybieranie widoków podzielonych, które tworzą aplikację profilera.
  • Lista instrumentów — zawiera listę wszystkich instrumentów załadowanych do sesji profilowania.
  • Wykres wykresowy — te wykresy odnoszą się poziomo do odpowiednich instrumentów na liście instrumentów. Suwak (pokazany poniżej profilera czasu) może służyć do zmiany skali.
  • Obszar Szczegóły instrumentu — zawiera dane wyświetlane przez wybrany widok bieżącego instrumentu. Przyjrzymy się tym widokom bardziej szczegółowo w poniższej sekcji.
  • Widok inspektora — zawiera sekcje, które można wybrać za pomocą kontrolki segmentowanej. Sekcje są zależne od wybranego instrumentu i obejmują: konfiguracja Ustawienia, statystyki, informacje śledzenia stosu i ścieżka do katalogów głównych.

Alokacji

Instrument alokacji zawiera szczegółowe informacje o obiektach w aplikacji podczas ich tworzenia i odzyskiwania pamięci.

W górnej części profilera znajduje się wykres alokacji, który wyświetla ilość pamięci przydzielonej w regularnych odstępach czasu podczas profilowania. Obecnie wykres alokacji jest całkowitą liczbą alokacji, a NIE rozmiarem sterty w tym momencie w czasie. W sensie, nigdy nie spadnie, tylko kiedykolwiek wzrośnie. Obejmuje to obiekty przydzielone na stosie. W zależności od używanej wersji środowiska uruchomieniowego wykres może wyglądać inaczej — nawet w przypadku tej samej aplikacji.

Istnieją różne widoki danych w instrumentze Alokacje, które umożliwiają deweloperom analizowanie sposobu używania i zwalniania pamięci przez deweloperów. Te widoki są opisane poniżej:

  • Alokacje — wyświetla listę wszystkich alokacji i grupuje je według nazwy klasy. Zapewnia to doskonałe omówienie używanych klas i metod, częstotliwości ich użycia oraz zbiorczego rozmiaru używanych klas. Dwukrotne kliknięcie klasy spowoduje wyświetlenie przydzielonej pamięci:

Widok Inspector for Allocations (Inspektor dla alokacji) zawiera opcje filtrowania i grupowania obiektów, zapewniając statystyki dotyczące przydzielonej pamięci oraz najważniejsze alokacje, a także widoki śledzenia stosu i ścieżki do katalogu głównego.

  • Drzewo wywołań — wyświetla całe drzewo wywołań wszystkich wątków w aplikacji i zawiera informacje o pamięci przydzielonej w każdym węźle. Po wybraniu elementu na liście wszystkie węzły równorzędne będą wyświetlane jako szare. Możesz rozwinąć drzewo lub kliknąć dwukrotnie element, aby przejść do szczegółów. Podczas wyświetlania tego widoku danych można użyć widoku inspektora ustawień wyświetlania w celu zmiany sposobu wyświetlania. Obecnie dostępne są dwie opcje:
    1. Odwrócone drzewo wywołań — uwzględnia ślad stosu od góry do dołu. Jest to wygodna opcja widoku, ponieważ wskazuje najgłębsze metody, w których procesor CPU spędzał swój czas.
    2. Rozdzielaj według wątku — ta opcja organizuje drzewo wywołań według wątku.
  • Migawki — w tym okienku są wyświetlane informacje o migawkach pamięci. Aby wygenerować te elementy podczas profilowania aplikacji na żywo, kliknij przycisk Aparat na pasku narzędzi w każdym momencie, w którym chcesz zobaczyć, jaka pamięć jest zachowywana i zwalniana. Następnie możesz kliknąć każdą migawkę, aby sprawdzić, co dzieje się pod maską. Należy pamiętać, że migawki można wykonywać tylko podczas profilowania na żywo aplikacji.

Profiler czasu

Instrument Time Profiler mierzy dokładnie, ile czasu spędza się w każdej metodzie aplikacji. Aplikacja jest wstrzymana w regularnych odstępach czasu, a śledzenie stosu jest uruchamiane w każdym aktywnym wątku. Każdy wiersz w obszarze Szczegóły instrumentu pokazuje ścieżkę wykonywania, która została po nim zastosowana.

Wykres wykresu, jak pokazano na poniższym zrzucie ekranu, wyświetla liczbę próbek odebranych przez aplikację podczas jej uruchamiania:

  • Drzewo wywołań — pokazuje ilość czasu spędzonego w każdej metodzie:

Cykle

Użycie kodu zarządzanego w języku C# i F# może być dość powszechne i niestety dość łatwe w tworzeniu odwołań do obiektów, które nigdy nie zostaną usunięte. Ten instrument umożliwia wskazanie tych obiektów i wyświetlenie cykli, do których odwołuje się aplikacja.

Profilowanie aplikacji

Obecnie można profilować tylko domyślne konfiguracje debugowania.

Jeśli profilujesz aplikację z inną konfiguracją, zostanie wyświetlone następujące okno dialogowe komunikatu:

Wybierz pozycję Aktualizuj , aby kontynuować.

Moduł odśmiecania pamięci I profilowania SGen

Moduł odśmiecający elementy SGen jest używany dla wszystkich platform Xamarin.

SGen to generacja GC, która przydziela obiekty aplikacji do trzech stertów — przedszkola, stert głównych i dużych obiektów. Dzięki temu można przyspieszyć wykonywanie odzyskiwania pamięci. SGen jest obecnie domyślnym GC dla aplikacji Xamarin.Android i Xamarin.iOS Unified.

Aplikacja platformy Xamarin.iOS korzystająca z klasycznego interfejsu API używała kontrolera GC Boehm — konserwatywnego, niegeneracyjnego modułu odśmiecywania pamięci. Ponieważ jest konserwatywny, jest mniej prawdopodobne, aby zwolnić dostępną pamięć, co może prowadzić do niedokładnych wyników podczas korzystania z profilera. Z tego powodu instrument Alokacje nie może być używany z modułem odśmiecającym pamięci Boehm.

Gdy zostanie wyświetlony monit z wyświetlonym oknie dialogowym komunikatu, jeśli aplikacja korzysta z kontrolera GC Boehm, platforma Xamarin nie zaleca przełączania istniejącej aplikacji dla systemu iOS, która korzysta z narzędzia Boehm do SGen bez starannych badań i dokładnych testów. Platforma Xamarin nie zaleca również przełączania do biblioteki SGen na potrzeby profilowania, a następnie przełączania z powrotem, ponieważ wyniki te nie zapewnią dokładnych testów porównawczych użycia pamięci.

Aby uzyskać więcej informacji na temat zarządzania pamięcią, zapoznaj się z przewodnikiem Najlepsze rozwiązania dotyczące pamięci i wydajności.

Podsumowanie

W tym przewodniku przyjrzeliśmy się temu, czym jest profilowanie i jak korzystne jest dla dewelopera. Następnie wprowadziliśmy narzędzie Xamarin Profiler, udostępniając historię i informacje o sposobie jego działania. Na koniec omówiliśmy funkcje programu Xamarin Profiler i zapoznaliśmy się z tematem Alokacje i Instrumenty profilera czasu.