İzlenecek yol-Apple 'ın araçlar aracını kullanma

Bu makalede, Xamarin ile oluşturulmuş bir iOS uygulamasındaki bellek sorunlarını tanılamak için Apple 'ın araçlar aracının nasıl kullanılacağı gösterilmektedir. Gereçleri başlatma, yığın anlık görüntülerini alma ve bellek büyümesini çözümleme işlemlerinin nasıl yapılacağını gösterir. Ayrıca, bellek sorununa neden olan kodun tam satırlarını göstermek ve saptamak için aletlerinin nasıl kullanılacağını gösterir.

Bu sayfada, bir iOS uygulamasındaki bellek sorununu tanılamak için Xcode araçları aracının nasıl kullanılacağı gösterilir. ilk olarak, memorydemo örneğini indirin ve Mac için Visual Studio çözüm yapmadan önce açın.

Bellek sorunlarını tanılama

  1. Mac için Visual Studio, araçlar başlatma araçları menü öğesinden gereçleri başlatın.

  2. cihaza Upload çalıştır menü öğesini seçerek uygulamayı cihaza Upload.

  3. Ayırmalar şablonunu seçin (beyaz kutu ile turuncu simge)

    Ayırma şablonunu seçin

  4. Pencerenin üst kısmındaki bir profil oluşturma şablonu seçin: listesinden bellek tanıtımı uygulamasını seçin. Yüklü uygulamaları gösteren menüyü genişletmek için önce iOS cihazına tıklayın.

    Bellek demo uygulamasını seçin

  5. Gereçleribaşlatmak için Seç düğmesine (pencerenin sağ alt kısmına) basın. ThiJs şablonu üst bölmede iki öğe gösterir: ayırmalar ve VM Izleyici.

  6. Araçlar 'da, uygulamayı başlatan kayıt düğmesine (sol üst kısımdaki kırmızı daire) basın.

  7. Üst bölmedeki VM izleyici satırını seçin (artık uygulama çalışır durumda olduğundan, iki bölüm Içerir: kirli ve yerleşik boyut). ınspector bölmesinde, bu ekran görüntüsünün sağ alt kısmında gösterilen görüntü Ayarlar göster seçeneğini (dişli simgesi) seçin, sonra otomatik anlık görüntü biçimlendirme onay kutusunu işaretleyin:

    görüntüyü göster Ayarlar dişli simgesini seçin ve sonra otomatik anlık görüntü biçimlendirme onay kutusunu işaretleyin

  8. Üst bölmedeki ayırmalar satırını seçin (artık uygulama çalışıyor olduğuna göre, tüm yığın ve anonim VM'ler olacaktır)

  9. ınspector bölmesinde, görüntü Ayarlar göster seçeneğini belirleyin (dişli simgesi) ve ardından bir taban çizgisi oluşturmak için, işaret oluşturmayı bas düğmesine tıklayın. Pencerenin üst kısmındaki zaman çizelgesinde küçük kırmızı bir bayrak görüntülenir

  10. Uygulamayı kaydırın, sonra üretimi yeniden işaretle (birkaç kez yinele) seçeneğini belirleyin

  11. Durdur düğmesine tıklayın.

  12. Nesil düğümünü en büyük büyüme Ile genişletin ve büyümeye göre (azalan) sıralayın.

  13. Inspector bölmesini, yığın Izlemesinigösteren genişletilmiş ayrıntıyı ("E") gösterecek şekilde değiştirin.

  14. Nesne > olmayan düğümün aşırı bellek büyümesini gösterdiğini unutmayın. Daha fazla ayrıntı görmek için bu düğümün yanındaki oka tıklayın-bölmesine kaynak konum eklemek için yığın izlemesinde sağ tıklayın:

    Kaynak konumunu bölmeye ekleyin

  15. Boyuta göre sıralayın ve genişletilmiş ayrıntı görünümünü görüntüleyin:

    Boyuta göre sırala ve genişletilmiş ayrıntı görünümünü görüntüle

  16. İlgili kodu görmek için çağrı yığınında istenen girdiye tıklayın:

    İlgili kodu görüntüleme

Bu durumda, yeni bir görüntü oluşturulur ve her bir hücre için bir koleksiyonda depolanır, ya da yeniden kullanılan var olan koleksiyon görünümü hücreleri olur.

Bellek sorunlarını çözme

Bu sorunları çözmek ve araçlar aracılığıyla uygulamayı yeniden çalıştırmak mümkündür.

Sınıf düzeyinde tek bir örnek bildirerek, görüntü yeniden kullanılabilir ve hücre nesnesi, aşağıda gösterildiği gibi, her seferinde oluşturulması yerine mevcut bir havuzdan yeniden kullanılabilir.

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

Artık uygulama çalıştırıldığında, bellek kullanımı büyük ölçüde azalır. oluşumlara ilişkin büyüme , kodu düzeltmeden önce olduğu gibi, yalnızca MIB (megabayt) yerine KiB (kilobayt) cinsinden ölçülür:

Uygulama belleği kullanımını gösterme

iyileştirilmiş kod, Mac için Visual Studio ' deki çözüm sonrasındamemorydemo örneğinde bulunabilir.

Xamarin. IOS atık toplama hakkında bu topluluk blogu, Xamarin. iOS ile bellek sorunlarıyla uğraşmaya yönelik yararlı bir başvurudur.

Özet

Bu makalede, aletlerinin bellek sorunlarını tanılamak için nasıl kullanılacağı gösterilmiştir. Mac için Visual Studio içinden aletlerinin nasıl başlatılacağı, bellek ayırma şablonunun nasıl yükleneceği ve bellek sorunlarını saptamak için anlık görüntüler kullanma adımlarından bahsedilirsiniz. Son olarak, sorun düzeltildiğini doğrulamak için uygulama yeniden incelendi.