Xamarin Profiler

Ce guide explore les principales fonctionnalités de Xamarin Profiler. Il examine les profileurs, le profilage et le moment où ils doivent être utilisés, ainsi qu’un flux de travail standard pour le profilage des applications Xamarin.

La réussite d’une application dépend de l’expérience de l’utilisateur final. En tant que développeur, vous avez peut-être implémenté des fonctionnalités vraiment impressionnantes dans votre application, mais si l’application est lente ou pleine de plantages, l’utilisateur s’en débarrassera probablement.

Historiquement, Mono a proposé un profileur de ligne de commande puissant pour collecter des informations sur les programmes en cours d’exécution dans le runtime Mono appelé profileur de journal Mono. Le profileur Xamarin est une interface graphique pour le profileur de journal Mono et prend en charge le profilage des applications Android, iOS, tvOS et Mac sur Mac, et les applications Android, iOS et tvOS sur Windows.

Le profileur Xamarin dispose d’un certain nombre d’instruments disponibles pour le profilage : Allocations, Cycles et Time Profiler. Ce guide explore ce que ces instruments mesurent, comment ils analysent votre application et clarifie la signification des données présentées sur chaque écran.

Ce guide examine les scénarios de profilage courants et présente le profileur en tant qu’outil permettant d’analyser et d’optimiser les applications iOS et Android.

Télécharger et installer

Notes

Vous devez être abonné Visual Studio Enterprise pour déverrouiller cette fonctionnalité dans Visual Studio Enterprise sur Windows ou Visual Studio pour Mac sur un Mac.

Xamarin Profiler est une application autonome qui est intégrée à Visual Studio pour Mac et à Visual Studio pour activer le profilage à partir de l’IDE.

Téléchargez le package d’installation pour votre plateforme :

Une fois téléchargé, lancez le programme d’installation pour ajouter Xamarin Profiler à votre système.

Profileurs et profilage

Le profilage est une étape importante et souvent ignorée dans le développement d’applications. Le profilage est une forme d’analyse dynamique du programme : il analyse le programme pendant son exécution et son utilisation. Un profileur est un outil d’exploration de données qui collecte des informations sur la complexité du temps, l’utilisation de méthodes particulières et la mémoire allouée. Un profileur vous permet d’explorer en profondeur et d’analyser ces métriques pour identifier les zones problématiques dans le code.

Lors de la conception et du développement d’une application, il est important de ne pas optimiser prématurément ; autrement dit, passez du temps à développer votre code dans des zones rarement accessibles. Il s’agit de la puissance du profilage. Un profileur fournit des informations sur les parties les plus couramment utilisées de votre base de code et vous aide à localiser les zones où vous devez passer du temps à apporter des améliorations. Les développeurs doivent prendre soin de comprendre où la plupart du temps est passé dans votre application et comment la mémoire est utilisée par votre application.

Le profilage est utile dans tous les types de développement, mais il est particulièrement crucial dans le développement mobile. Le code non optimisé est beaucoup plus visible sur les plateformes mobiles que sur les ordinateurs de bureau, et la réussite de votre application dépend d’un code magnifique et optimisé qui s’exécute efficacement.

Xamarin Profiler

Le profileur Xamarin fournit aux développeurs un moyen de profiler des applications à partir de Visual Studio pour Mac ou de Visual Studio. Le profileur collecte et affiche des informations sur l’application, qui peuvent ensuite être utilisées par le développeur pour analyser le comportement d’une application. Il existe plusieurs façons de profiler une application avec Xamarin Profiler, à savoir le profilage de la mémoire et l’échantillonnage statistique. Ces opérations sont effectuées par le biais des instruments Allocations et Time Profiler respectivement.

Actuellement, le profileur Xamarin peut être utilisé pour tester les applications Xamarin.iOS, Xamarin.Android et Xamarin.Mac sur Mac (via Visual Studio pour Mac). Le profileur est un processus distinct de l’IDE. Par conséquent, en plus du lancement à partir de Visual Studio pour Mac, il peut être utilisé comme application autonome pour examiner .exe et .mlpd les fichiers qui ont été générés à partir du profileur de journal mono.

Prise en charge du profileur

La prise en charge de Xamarin Profiler est disponible sur les plateformes suivantes :

  • Visual Studio pour Mac (macOS, avec licence Entreprise)

    • Android
      • Appareil et émulateur
    • iOS
      • Appareil et simulateur
    • tvOS (l’instrument de temps n’est pas pris en charge)
      • Appareil et simulateur
    • Mac
  • Visual Studio (version Entreprise uniquement)

    • Android
      • Appareil et émulateur
    • iOS [Expérimental]
      • Appareil et simulateur
    • tvOS
      • Appareil et simulateur

Notez que vous pouvez uniquementprofiler les configurations de débogage .

Notions de base du profileur

Cette section présente les parties du profileur Xamarin et présente ses fonctionnalités.

Autoriser le profilage dans votre application

Avant de pouvoir correctement profiler votre application, vous devez autoriser le profilage dans les options de projet de l’application.

  • iOS :

Créer un > débogage > iOS Activer le profilage

Boîte de dialogue Options iOS dans Visual Studio pour Mac

  • Android :

Générer Android > Debug > Activer l’instrumentation des développeurs

Boîte de dialogue Options Android dans Visual Studio pour Mac

Lancement du Profileur

Xamarin Profiler peut être lancé à partir de votre IDE lorsque vous profilez votre application iOS ou Android, ou en tant qu’application autonome.

Lancement à partir de Visual Studio pour Mac

  1. Tout d’abord, vérifiez que votre application est chargée dans Visual Studio pour Mac, puis sélectionnez la configuration de débogage (par défaut).
  2. Accédez à Exécuter le > profilage de démarragedans Visual Studio pour Mac ou à Analyser > Xamarin Profiler dans Visual Studio pour ouvrir le Profileur, comme illustré dans le diagramme ci-dessous :

Lancement du Profileur à partir de Visual Studio pour Mac

Si les éléments de menu n’apparaissent pas, reportez-vous au guide de résolution des problèmes.

Cela lance le Profileur et démarre automatiquement le profilage de l’application.

Le Profileur peut être utilisé pour mesurer la mémoire et les performances. Il y parvient grâce aux instruments Allocations et Time Profiler, que nous explorerons en détail dans la section suivante.

Enregistrement et chargement des sessions du profileur

Pour enregistrer une session de profilage à tout moment, choisissez Enregistrer > sous... dans la barre de menus du Profileur. Cela enregistre le fichier au format mlpd , un format spécial et hautement compressé pour le profilage des données.

Une fois installé, Xamarin Profiler se trouve dans votre dossier Applications, comme illustré dans la capture d’écran ci-dessous :

Ouvrir le profileur autonome à partir de Mac

Vous pouvez charger des fichiers .mlpd dans le profileur en ouvrant l’application autonome, en sélectionnant Choisir la cible et en chargeant le fichier.

Pour plus d’informations, consultez Génération de fichiers .mlpd.

Fonctionnalités du profileur

Le profileur Xamarin est composé de cinq sections, comme illustré ci-dessous :

  • Barre d’outils : située en haut du profileur, elle offre des options pour démarrer/arrêter le profilage, sélectionner un processus cible, afficher l’heure d’exécution de l’application et sélectionner les vues fractionnées qui composent l’application profileur.
  • Liste d’instruments : répertorie tous les instruments chargés pour la session de profilage.
  • Graphique de traçage : ces graphiques sont liés horizontalement aux instruments pertinents dans la liste des instruments. Un curseur (affiché sous Time Profiler) peut être utilisé pour modifier l’échelle.
  • Zone Détails de l’instrument : contient les données affichées par la vue sélectionnée de l’instrument actuel. Nous examinerons ces vues plus en détail dans la section ci-dessous.
  • Vue Inspecteur : contient des sections qui peuvent être sélectionnées par le contrôle segmenté. Les sections dépendent de l’instrument sélectionné et incluent : Paramètres de configuration, Statistiques, Informations de trace de pile et Chemin d’accès aux racines.

Allocations

L’instrument d’allocations fournit des informations détaillées sur les objets de l’application au fur et à mesure de leur création et du nettoyage de la mémoire.

En haut du profileur se trouve le graphique des allocations, qui affiche la quantité de mémoire allouée à intervalles réguliers pendant le profilage. Actuellement, le graphique des allocations correspond au nombre total d’allocations et non à la taille du tas à ce stade. En un sens, il ne baissera jamais, il ne fera qu’augmenter. Cela inclut les objets alloués sur la pile. Selon la version du runtime utilisée, le graphique peut être différent, même pour la même application.

Il existe différentes vues de données dans l’instrument Allocations, qui permettent aux développeurs d’analyser la façon dont leur application utilise et libère de la mémoire. Ces vues sont décrites ci-dessous :

  • Allocations : affiche la liste de toutes les allocations et les regroupe par nom de classe. Cela fournit une vue d’ensemble des classes et méthodes utilisées, de la fréquence à laquelle elles sont utilisées et de la taille collective des classes utilisées. Le double-clic sur une classe affiche la mémoire allouée :

La vue Inspector pour Allocations fournit des options de filtrage et de regroupement d’objets, fournissant des statistiques sur la mémoire allouée et les allocations principales, ainsi que des vues pour Stack Trace et Path to Root.

  • Arborescence des appels : affiche l’arborescence des appels de tous les threads de l’application et inclut des informations sur la mémoire allouée sur chaque nœud. Lorsqu’un élément est sélectionné dans la liste, tous les nœuds frères apparaissent en gris. Vous pouvez développer l’arborescence ou double-cliquer sur l’élément pour l’explorer. Lors de l’affichage de cette vue de données, l’affichage de l’inspecteur des paramètres d’affichage peut être utilisé pour modifier la façon dont il est présenté. Il existe actuellement deux options :
    1. Arborescence des appels inversés : prend en compte la trace de la pile de haut en bas. Il s’agit d’une option d’affichage pratique, car elle indique les méthodes les plus profondes où le processeur a passé son temps.
    2. Séparer par thread : cette option organise l’arborescence des appels par thread.
  • Instantanés : ce volet affiche des informations sur les instantanés en mémoire. Pour les générer lors du profilage d’une application active, cliquez sur le bouton Caméra dans la barre d’outils à chaque point où vous souhaitez voir quelle mémoire est conservée et libérée. Vous pouvez ensuite cliquer sur chaque instantané pour explorer ce qui se passe sous le capot. Notez que les instantanés ne peuvent être pris que lors du profilage en direct d’une application.

Time Profiler

L’instrument Time Profiler mesure exactement le temps passé dans chaque méthode d’une application. L’application est suspendue à intervalles réguliers et une trace de pile est exécutée sur chaque thread actif. Chaque ligne de la zone Détails de l’instrument affiche le chemin d’exécution qui a été suivi.

Le graphique de traçage, comme illustré dans la capture d’écran ci-dessous, affiche le nombre d’exemples reçus par l’application pendant son exécution :

  • Arborescence des appels : indique le temps passé dans chaque méthode :

Cycles

Grâce à l’utilisation de code managé C# et F#, il peut être assez courant, et malheureusement assez facile de créer des références à des objets qui ne seront jamais supprimés. Cet instrument vous permet d’identifier ces objets et d’afficher les cycles référencés dans votre application.

Profilage des applications

Actuellement, seules les configurations de débogage par défaut peuvent être profilées.

Si vous profilez une application avec une autre configuration, la boîte de dialogue de message suivante s’affiche :

Sélectionnez Mettre à jour pour continuer.

Garbage Collector et profilage SGen

Le récupérateur de mémoire SGen est utilisé pour toutes les plateformes Xamarin.

SGen est un GC générationnel, qui alloue les objets d’une application en trois tas : Nursery, Major Heap et Large Object Space. Cela permet une exécution plus rapide du garbage collection. SGen est actuellement le gc par défaut pour les applications unifiées Xamarin.Android et Xamarin.iOS.

L’application Xamarin.iOS utilisant l’API classique utilisait le GC Boehm, un récupérateur de mémoire conservateur et non générationnel. Comme il est conservateur, il est moins susceptible de libérer de la mémoire disponible, ce qui peut conduire à des résultats inexacts lors de l’utilisation du profileur. Pour cette raison, l’instrument Allocations ne peut pas être utilisé avec le récupérateur de mémoire Boehm.

Bien que vous serez invité à entrer une boîte de dialogue de message si votre application utilise le GC Boehm, Xamarin ne recommande pas de basculer l’application iOS existante qui utilise Boehm vers SGen sans avoir à effectuer de recherches approfondies et à effectuer des tests approfondis. Xamarin ne recommande pas non plus de basculer vers SGen pour le profilage, puis de revenir en arrière, car ces résultats ne fournissent pas de références précises de l’utilisation de la mémoire.

Pour plus d’informations sur la gestion de la mémoire, consultez le Guide des meilleures pratiques en matière de mémoire et de performances .

Résumé

Dans ce guide, nous avons examiné ce qu’est le profilage et en quoi il est avantageux pour le développeur. Nous avons ensuite introduit Xamarin Profiler, en fournissant un historique et des informations sur son fonctionnement. Enfin, nous avons visité les fonctionnalités de Xamarin Profiler et exploré les instruments d’allocations et de profileur de temps.