Xamarin.Forms Performans İpuçları

  • Xaml Compiler’ı açmak.
  • Doğru Layout’u kullanmak.
  • Layout Compression’a izin vermek.
  • Gereksiz Binding’leri kaldırmak.
  • Layout performansını optimize etmek.
  • ListView performansını optimize etmek.
  • Image resource’larını çözünürlüğe göre optimize etmek.
  • Custom Renderer kullanma.

1.    XAML Compiler

[XamlCompilation(XamlCompilationOptions.Compile)]

Namespace ve class seviyesinde yapılabilir. Yaptığı işlem:

XAML ——–>  IL

  • Xaml’i derleme anında kontrol eder ve geliştiriciyi uyarır.
  • Xaml elementlerinin yüklenme zamanını azaltır.
  • .xaml dosyasını eklemeyerek, en son assembly’nin boyutunu azaltır.

! XMALC varsayılan olarak kapalıdır.

2.    Gereksiz Binding’leri Kaldırın

Statik olarak ayarlanabilecek verileri bind etmeye gerek yok. İlişkilendirmeye gerek olmayan verileri bind etmek performans kaybına neden olacaktır. Örneğin;

Button.Text = “Kaydet”, Button.Text’i ViewModel’de atamaktan daha performanslıdır.

3.    Layout Performansını Optimize Etmek

  • Birden fazla kontrol içerebilme özellğine sahip bir layout’u tek bir kontrol için kullanmak performans kaybıdır. Örneğin:

<ContentPage.Content>

 <StackLayout>
 <Label x:Name=”myLabel” />
</StackLayout>

</ContentPage.Content>

Burada kullanılan StackLayout tamamen gereksizdir.

  • Bir layout’un işlevini veya görüntüsünü elde etmek için birden fazla layout’un kombinasyonlarından yararlanmak performansı ciddi anlamda etkileyecek ve gereksiz layout ayarlamalarının yapılmasına sebep olacaktır.. Örneğin; Grid görünümünü elde etmek için StackLayout kombinasyonlarını oluşturmak.
  • Grid kullanırken mümkün olduğunca az satır ve sütunun, boyutunun otomatik ayarda olmasına dikkat edin. Çünkü otomatik boyut ayarı verilmiş her satır ve sütun için ek boyut hesaplaması yapılır ve bu da tasarımın yüklenme süresini etkiler. Bunun için olabildiğince sabit değerli satır ve sütun kullanılmalıdır.
  • Vertical Options ve HorizontalOptions özelliklerini gerekmedikçe atamayın. Varsayılan ayarlar, genellikle en iyi sonucu verirler. Bu ayarları değiştirmek, varsayılan değerlerine atanmış olsalar bile süre ve hafıza kaybına yol açar. Varsayılan değerler şöyle:

Vertical Options = LayoutOptions.Fill

HorizontalOptions = LayoutOptions.FillAndExpand

  • RelativeLayout, CPU’ya fazla iş yükü bindirdiğinden dolayı gerekmedikçe kullanmayın.
  • AbsoluteLayout kullanırken, mümkün olduğunca AbsoluteLayout.AutoSize özelliğini kullanmaktan kaçının.
  • Layout sınıfına ait metodları çağırmayın. Gereksiz yere layout ayarlamalarının yapılmasına sebep olacaktır.
  • Label’ları çok fazla güncellemeyin. Label’ın güncellenmesi demek tüm sayfadaki kontrol ve layout’ların yeniden yüklenmesi demektir.
  • Label’ın LineBreakMode özelliğini mümkün olduğunca NoWrap’a ayarlayın.

4.   ListView Performansı

ListView’de performansı iyileştirmek için bazı teknikler mevcut.

  • CachingStrategy’i kullanın.  ListView kontrolünün native’deki herbir karşılığının satırları tekrar kullanabilme özelliği mevcut. Sadece ekranda görünen hücreler hafızaya alınıyor. Bu sayede uygulamamızda binlerce satır aynı anda yüklenmiyor. ListView, CachingStrategy’nin alabileceği değerler:
    • Retain Element(Varsayılan)
    • RecycleElement
    • RecycleElementAndDataTemplate
  • ItemSource’u IList<T>’ye bind etmek, IEnumerable<T>’ye bind etmekten daha iyi bir sonuç verecektir. Çünkü IEnumerable<T> rastgele erişimi desteklemez.
  • ViewCell yerine mümkün olduğunca hazır cell (TextCell/SwitchCell) kullanın.
  • Kullandığınız eleman sayısını az tutun. Örneğin; birden fazla label kullanmak yerine FormattedString kullanmak gibi.
  • Farklı tipte ve uzunlukta veriler için ListView yerine TableView kullanın.
  • Android’de ListView’in row seperator’unun rengini ya da görünürlüğünü, ListView oluşturulduktan sonra değiştirmeyin. Ciddi performans sorunlarına yol açabilir.
  • Hücre düzenini, BindingContext’e dayanarak değiştirmeyin. Yüklenme süresini ciddi manada etkiler.
  • Çok fazla iç içe layout kullanmayın.
  • Fill seçeneği en hızlısı olduğundan dolayı gerekmedikçe Fill dışındaki LayoutOptions’ları kullanmayın.
  • ScrollView içerisinde ListV iew kullanmaktan kaçının. Çünkü:
    • ListView’in kendi scroll özelliği zaten var.
    • Kullandığınız takdirde ListView hiçbir kullanıcı etkileşimini kabul etmez. Bunun sebebi de en dıştaki ScrollView’dir.
  • Eğer çok karmaşık bir hücre yapınız varsa custom renderer kullanmayı deneyin.

Kaynak: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir