Návod – Použití nástroje Instruments společnosti Apple

Tento článek vás provede použitím nástroje Instruments společnosti Apple k diagnostice problémů s pamětí v aplikaci pro iOS vytvořené pomocí Xamarinu. Ukazuje, jak spustit Instrumenty, pořazovat snímky haldy a analyzovat růst paměti. Ukazuje také, jak pomocí nástroje zobrazit a určit přesné řádky kódu, které způsobují problém s pamětí.

Tato stránka ukazuje, jak pomocí nástroje Instruments nástroje Xcode diagnostikovat problém s pamětí v aplikaci pro iOS. Nejprve si stáhněte ukázku MemoryDemo a otevřete řešení before v Visual Studio pro Mac.

Diagnostika problémů s pamětí

  1. V Visual Studio pro Mac nástroje z položky nabídky Nástroje pro spuštění nástrojů spusťte Nástroje.

  2. Upload aplikaci do zařízení výběrem položky nabídky Spustit Upload na Zařízení.

  3. Zvolte šablonu Přidělení (oranžová ikona s bílým rámečem).

    Volba šablony Přidělení

  4. V seznamu Zvolit šablonu profilace pro v horní části okna vyberte aplikaci Ukázka paměti. Nejprve klikněte na zařízení s iOSem a rozbalte nabídku s nainstalovanými aplikacemi.

    Výběr ukázkové aplikace paměti

  5. Stisknutím tlačítka Zvolit (v pravém dolním rohu okna) spusťte Instrumenty. Šablona ThiJs zobrazí v horním podokně dvě položky: Allocations (Přidělení) a VM Tracker (Sledování virtuálního počítače).

  6. V části Instruments (Nástroje) stiskněte tlačítko Record (Záznam) (červené kolečko vlevo nahoře), které spustí aplikaci.

  7. V horním podokně vyberte řádek Sledování virtuálního počítače (teď, když je aplikace spuštěná, bude obsahovat dva oddíly: Dirty (Neschůcené) a Resident Size (Místní velikost). V podokně inspektoru zvolte možnost Zobrazit Nastavení (ikona ozubeného kola) a potom zaškrtněte políčko Automatické pořizování snímků, které se zobrazuje v pravém dolním rohu tohoto snímku obrazovky:

    Zvolte možnost Zobrazit zobrazení Nastavení ikonu ozubeného kola a potom zaškrtněte políčko Automatické pořizování snímků.

  8. V horním podokně vyberte Řádek přidělení (teď, když je aplikace spuštěná, se zobrazí Všechny haldy a Anonymní virtuální počítače).

  9. V podokně inspektoru zvolte možnost Zobrazit Nastavení (ikona ozubeného kola) a potom klikněte na tlačítko Označit generaci a vytvořte základ. Na časové ose v horní části okna se zobrazí malý červený příznak.

  10. Posuňte aplikaci a pak znovu vyberte Označit generaci (několikrát to zopakujte).

  11. Klikněte na tlačítko Zastavit.

  12. Rozbalte uzel Generace s největším růstem a seřa potom podle růstu (sestupně).

  13. Změňte podokno inspektoruna Zobrazit rozšířené podrobnosti ("E"), které zobrazuje trasování zásobníku.

  14. Všimněte si, > že uzel, který není objektem, vykazuje nadměrný růst paměti. Kliknutím na šipku vedle tohoto uzlu zobrazíte další podrobnosti – kliknutím pravým tlačítkem do trasování zásobníku přidejte do podokna umístění zdroje:

    Přidání zdrojového umístění do podokna

  15. Seřadit podle velikosti a zobrazit rozšířené zobrazení podrobností:

    Řazení podle velikosti a zobrazení rozšířených podrobností

  16. Kliknutím na požadovanou položku v zásobníku volání zobrazíte související kód:

    Zobrazení souvisejícího kódu

V tomto případě se pro každou buňku vytvoří nový obrázek a uloží se do kolekce, ani se znovu nevyužití existující buňky zobrazení kolekce.

Řešení problémů s pamětí

Tyto problémy je možné vyřešit a spustit aplikaci znovu pomocí nástroje Instruments.

Deklarováním jedné instance na úrovni třídy je možné image znovu použít a objekt buňky je možné znovu použít z existujícího fondu místo vytváření pokaždé, jak je znázorněno níže:

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

Když teď aplikaci spustíte, využití paměti se výrazně sníží – růst mezi generacemi se teď měří v Kib (kilobajty) místo MiB (megabajty), jak tomu bylo před opravou kódu:

Zobrazení využití paměti aplikace

Vylepšený kód je k dispozici v ukázce MemoryDemo v řešení after v Visual Studio pro Mac.

Tento blog komunity o uvolňování paměti Xamarin.iOS je užitečným odkazem pro řešení problémů s pamětí v Xamarin.iOS.

Souhrn

Tento článek předvedl, jak pomocí nástrojů diagnostikovat problémy s pamětí. Popisuje, jak spouštět nástroje z Visual Studio pro Mac, jak načíst šablonu přidělení paměti a jak pomocí snímků určit problémy s pamětí. Nakonec jsme aplikaci znovu prozkoumali, aby se ověřilo, že se problém vyřešil.