Udostępnij za pośrednictwem


Przewodnik — korzystanie z narzędzia Instrumentów firmy Apple

W tym artykule opisano, jak używać narzędzia Instruments firmy Apple do diagnozowania problemów z pamięcią w aplikacji systemu iOS utworzonej za pomocą platformy Xamarin. Demonstruje on sposób uruchamiania instrumentów, tworzenia migawek stert i analizowania wzrostu pamięci. Pokazano również, jak używać instrumentów do wyświetlania i ustalania dokładnych wierszy kodu, które powodują problem z pamięcią.

Na tej stronie pokazano, jak używać narzędzia Narzędzia instrumentów Xcode do diagnozowania problemu z pamięcią w aplikacji systemu iOS.

Diagnozowanie problemów z pamięcią

  1. W Visual Studio dla komputerów Mac uruchom narzędzie Instruments z poziomu elementu menu Narzędzia > Uruchom instrumenty.

  2. Przekaż aplikację do urządzenia, wybierając element menu Uruchom > przekazywanie do urządzenia .

  3. Wybierz szablon Alokacje (pomarańczowa ikona z białym polem)

    Wybieranie szablonu Alokacje

  4. Wybierz aplikację Pokaz pamięci w obszarze Wybierz szablon profilowania dla: listę w górnej części okna. Kliknij najpierw urządzenie z systemem iOS, aby rozwinąć menu z wyświetlonymi zainstalowanymi aplikacjami.

    Wybierz aplikację pokazu pamięci

  5. Naciśnij przycisk Wybierz (w prawym dolnym rogu okna), aby uruchomić instrumenty. Szablon ThiJs wyświetli dwa elementy w górnym okienku: Alokacje i Śledzenie maszyn wirtualnych.

  6. Naciśnij przycisk Nagraj (czerwony okrąg w lewym górnym rogu) w obszarze Instrumenty, które uruchomi aplikację.

  7. Wybierz wiersz Tracker maszyny wirtualnej w górnym okienku (teraz, gdy aplikacja jest uruchomiona, będzie zawierać dwie sekcje: Brudny i Rozmiar rezydentny). W okienku Inspector (Inspektor) wybierz opcję Pokaż wyświetlanie Ustawienia (ikona koła zębatego), a następnie zaznacz pole wyboru Automatyczne tworzenie migawek widoczne w prawym dolnym rogu tego zrzutu ekranu:

    Wybierz opcję Pokaż wyświetlanie Ustawienia ikona koła zębatego, a następnie zaznacz pole wyboru Automatyczne tworzenie migawek

  8. Wybierz wiersz Alokacje w górnym okienku (teraz, gdy aplikacja jest uruchomiona, zostanie wyświetlona wartość Wszystkie sterty i anonimowa maszyna wirtualna)

  9. W okienku Inspector (Inspektor) wybierz opcję Pokaż wyświetlanie Ustawienia (ikona koła zębatego), a następnie kliknij przycisk Mark Generation (Generowanie znaku mark), aby ustanowić punkt odniesienia. Na osi czasu w górnej części okna pojawi się mała czerwona flaga

  10. Przewiń aplikację, a następnie ponownie wybierz pozycję Mark Generation (Powtórz kilka razy)

  11. Kliknij przycisk Zatrzymaj.

  12. Rozwiń węzeł Generacja z największym wzrostem i posortuj według wzrostu (malejąco).

  13. Zmień okienko Inspector (Inspektor) na Pokaż rozszerzone szczegóły (E), które pokazuje ślad stosu.

  14. Zwróć uwagę, że <węzeł inny niż obiekt> pokazuje nadmierny wzrost pamięci. Kliknij strzałkę obok tego węzła, aby wyświetlić więcej szczegółów — kliknij prawym przyciskiem myszy ślad stosu, aby dodać lokalizację źródłową do okienka:

    Dodawanie lokalizacji źródłowej do okienka

  15. Sortuj według rozmiaru i wyświetl widok szczegółów rozszerzonych:

    Sortuj według rozmiaru i wyświetl widok szczegółów rozszerzonych

  16. Kliknij żądany wpis w stosie wywołań, aby wyświetlić powiązany kod:

    Wyświetlanie powiązanego kodu

W takim przypadku nowy obraz jest tworzony i przechowywany w kolekcji dla każdej komórki, ani istniejące komórki widoku kolekcji są ponownie używane.

Rozwiązywanie problemów z pamięcią

Można rozwiązać te problemy i ponownie uruchomić aplikację za pomocą instrumentów.

Deklarując pojedyncze wystąpienie na poziomie klasy, obraz można ponownie użyć, a obiekt komórki można użyć ponownie z istniejącej puli zamiast tworzyć za każdym razem, jak pokazano poniżej:

public override UICollectionViewCell GetCell (UICollectionView collectionView, NSIndexPath indexPath)
{
    // Dequeue a cell from the reuse pool
    var imageCell = (ImageCell)collectionView.DequeueReusableCell (cellId, indexPath);

    // Reuse the image declared at the class level
    imageCell.ImageView.Image = image;

    return imageCell;
}

Teraz, gdy aplikacja jest uruchamiana, użycie pamięci jest znacznie zmniejszone — wzrost między generacjami jest teraz mierzony w kib (kilobajtach), a nie w miB (megabajtach), tak jak przed naprawieniem kodu:

Wyświetlanie użycia pamięci aplikacji

Artykuł Xamarin.iOS Garbage Collection (Odzyskiwanie pamięci platformy Xamarin.iOS) jest przydatnym odwołaniem do rozwiązywania problemów z pamięcią na platformie Xamarin.iOS.

Podsumowanie

W tym artykule pokazano, jak używać instrumentów do diagnozowania problemów z pamięcią. Opisano w nim sposób uruchamiania instrumentów z poziomu Visual Studio dla komputerów Mac, ładowania szablonu alokacji pamięci i kroków użycia migawek w celu określenia problemów z pamięcią. Na koniec aplikacja została ponownie zbadana, aby sprawdzić, czy problem został rozwiązany.