Návod – Použití nástroje Apple
Tento článek vás provede používáním nástroje Apple Instruments k diagnostice problémů s pamětí v aplikaci pro iOS vytvořenou pomocí Xamarinu. Ukazuje, jak spustit nástroje, pořizovat snímky haldy a analyzovat růst paměti. Ukazuje také, jak pomocí nástrojů 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 Nástroje Xcode diagnostikovat problém s pamětí v aplikaci pro iOS.
Diagnostika problémů s pamětí
V Visual Studio pro Mac spusťte nástroje z položky nabídky Nástroje > spustit nástroje.
Nahrajte aplikaci do zařízení tak, že zvolíte položku nabídky Spustit > nahrání do zařízení .
Zvolte šablonu Přidělení (oranžová ikona s bílým rámečkem)
Vyberte aplikaci Ukázka paměti v šabloně Zvolit profilaci pro: seznam v horní části okna. Kliknutím na zařízení s iOSem nejprve rozbalte nabídku, která zobrazuje nainstalované aplikace.
Stisknutím tlačítka Zvolit (vpravo dole v okně) spusťte nástroje. Šablona ThiJs zobrazí v horním podokně dvě položky: Přidělení a sledování virtuálních počítačů.
V nástrojích stiskněte tlačítko Záznam (červené kolečko v levém horním rohu), které spustí aplikaci.
V horním podokně vyberte řádek Sledování virtuálních počítačů (teď, když je aplikace spuštěná, bude obsahovat dvě části: Dirty a Resident Size). V podokně inspektoru zvolte možnost Zobrazit Nastavení (ikona ozubeného kola) a zaškrtněte políčko Automatické vytváření snímků, které se zobrazí v pravém dolním rohu tohoto snímku obrazovky:
V horním podokně vyberte řádek Přidělení (teď, když je aplikace spuštěná, zobrazí se všechny haldy a anonymní virtuální počítač).
V podokně inspektoruzvolte možnost Zobrazit Nastavení zobrazení (ikona ozubeného kola) a kliknutím na tlačítko Označit generaci vytvořte směrný plán. Na časové ose v horní části okna se zobrazí malý červený příznak.
Posuňte aplikaci a pak znovu vyberte Označit generaci (několikrát opakujte).
Klikněte na tlačítko Zastavit .
Rozbalte uzel Generování s největším růstem a seřaďte ho podle položky Growth (sestupně).
Změňte podokno inspektoru na Zobrazení rozšířených podrobností ("E"), které zobrazuje trasování zásobníku.
Všimněte si, že uzel bez objektu <> ukazuje nadměrný růst paměti. Kliknutím na šipku vedle tohoto uzlu zobrazíte další podrobnosti – kliknutím pravým tlačítkem myši do trasování zásobníku přidáte umístění zdroje do podokna:
Seřadit podle velikosti a zobrazit rozšířené zobrazení podrobností:
Kliknutím na požadovanou položku v zásobníku volání zobrazíte související kód:
V tomto případě se vytvoří a uloží nová image do kolekce pro každou buňku, ani existující buňky zobrazení kolekce se znovu nepoužívají.
Řešení problémů s pamětí
Tyto problémy je možné vyřešit a aplikaci znovu spustit prostřednictvím nástroje.
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 toho, aby se pokaždé vytvářel, 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ž je aplikace spuštěná, využití paměti se výrazně sníží – růst mezi generacemi se teď měří v Kibu (kilobajtech), nikoli v MiB (megabajtech), jak tomu bylo před opravou kódu:
Článek Xamarin.iOS Uvolňování paměti je užitečným odkazem pro řešení problémů s pamětí v Xamarin.iOS.
Shrnutí
Tento článek ukazuje, jak pomocí nástrojů diagnostikovat problémy s pamětí. Popisuje, jak spustit nástroje z Visual Studio pro Mac, načíst šablonu přidělení paměti a krok použít snímky k určení problémů s pamětí. Nakonec se aplikace znovu prozkoumala a ověřila, že se problém opravil.