Performances de Xamarin.Mac

Vue d’ensemble

Les applications Xamarin.Mac sont similaires aux applications Xamarin.iOS, et la plupart des mêmes suggestions relatives aux performances leur sont applicables :

mais un certain nombre de suggestions spécifiques à macOS peuvent être utiles.

Préférer le framework cible moderne

Plusieurs frameworks cibles avec des fonctionnalités et des caractéristiques de performances différentes sont disponibles pour une application Xamarin.Mac.

Dans la mesure du possible, préférez le framework Moderne et utilisez des bibliothèques dépendantes pour ajouter la prise en charge. Seul le framework cible Moderne permet la liaison, ce qui peut considérablement réduire la taille de l’assembly. Cela devient particulièrement important quand AOT est activé, car la compilation AOT d’assemblys complets peut produire des bundles finaux volumineux.

Activer l’éditeur de liens

Le temps de démarrage, à la fois lors du chargement et de JIT (« Just In Time »), évolue de façon plutôt linéaire avec la taille de vos fichiers binaires finaux. La façon la plus simple d’améliorer cela consiste à supprimer le code mort avec l’éditeur de liens.

Même si cette suggestion s’applique principalement aux utilisateurs du framework cible Moderne, l’utilisation de la liaison de plateforme peut également fournir une amélioration limitée des performances.

Activer AOT si nécessaire

La compilation JIT des assemblys en code machine constitue un autre aspect des performances du démarrage. La compilation Ahead of Time (AOT) peut réduire considérablement le temps de démarrage, mais elle s’accompagne d’un certain nombre de compromis traités dans la documentation d’AOT.

Garantir les performances des délégués

De nombreuses applications Xamarin.Mac sont centrées sur les vues Cocoa comme NSCollectionView, NSOutlineView ou NSTableView. Souvent, ces vues sont optimisées par les classes Delegate et DataSource que vous fournissez à Cocoa, répondant à des questions sur les éléments à afficher.

Beaucoup de ces points d’entrée sont souvent appelés, parfois plusieurs fois par seconde lors du défilement.

Afin d’éviter le blocage de l’interface utilisateur, vérifiez que ces fonctions retournent des valeurs qui sont facilement calculées ou qui utilisent des informations déjà mises en cache.

Utiliser les API fournies par Cocoa pour la réutilisation des vues

De nombreuses vues Cocoa contenant beaucoup de cellules ou de vues enfants (comme NSCollectionView, NSOutlineView et NSTableView) fournissent des API pour créer et réutiliser des vues. Ces API créent des pools d’éléments partagés et évitent les problèmes de performances lors du défilement rapide des vues.

Utiliser async pour ne pas bloquer l’interface utilisateur

Les applications de bureau traitent souvent de grandes quantités de données, et il est très facile de bloquer le thread d’interface utilisateur en attente d’une opération synchrone.

Autant que possible, utilisez async et des threads pour éviter le blocage de l’interface utilisateur.

Pour les opérations dont l’exécution est longue, utilisez NSProgressIndicator ou d’autres options signalées dans les recommandations HIG (Human Interface Guidelines) d’Apple pour avertir les utilisateurs.