Fermer

décembre 7, 2022

Performances .NET MAUI—.NET Conf 2022

Performances .NET MAUI—.NET Conf 2022


Découvrez ce que Jonathan Peppers a partagé lors de sa session .NET Conf 2022 sur les mises à jour des performances .NET MAUI avec la sortie de .NET 7.

Les 8, 9 et 10 novembre, nous avons eu le Conférence .NET 2022 événement, au cours duquel l’équipe Microsoft a présenté des nouvelles et des améliorations super intéressantes dans les domaines Web, mobile, cloud et bien d’autres aspects. Cette fois, nous allons résumer la présentation de Jonathan Peppers sur Améliorations des performances dans .NET MAUI (édition .NET 7).

Capture d'écran de Jonathan Peppers à côté de sa diapositive

Objectifs pour .NET 6 et 7

L’équipe Microsoft avait deux problèmes principaux à résoudre :

  • iOS a démarré rapidement mais l’application était grande.
  • Alors que sous Android, c’était l’inverse : l’application était bonne mais nous avons eu des problèmes au démarrage.

C’est pourquoi l’objectif était de 800 millisecondes à afficher sur un Pixel 5. Ils visaient également à obtenir environ 10 mégaoctets pour le modèle .NET MAUI sur iOS, et ils ont fait de très bons progrès vers ces objectifs dans .NET 6.

Objectifs pour les diapositives .NET 6 et 7, comme indiqué ci-dessous

Mais lorsqu’ils ont commencé à travailler sur .NET 7, ils ont reçu les commentaires des clients pour continuer à corriger d’autres choses comme le démarrage du bureau, les mises en page Android et les performances de défilement. L’équipe s’est concentrée sur ces commentaires, mais également dans .NET 7, ils ont fini par apporter d’autres améliorations pour rendre leurs applications plus petites et capables de démarrer plus rapidement également.

Diapositive montrant deux captures d'écran de l'application et deux graphiques.  La liste à puces indique : Une CollectionView avec 10 000 éléments, chaque ligne contient deux étiquettes liées aux données, elle doit défiler rapidement

Cette image était déjà présentée dans le État de .NET MAUI conférence de David Ortinau et Maddy Montaquila. Maintenant, creusons un peu plus !

Il s’agit d’une application qui était sur Reddit il y a quelques années, où des étiquettes avec le texte « LOL » apparaissaient à l’écran dans des couleurs et des rotations aléatoires. L’application mesure combien de fois elle peut charger une autre étiquette par seconde (LOL par seconde).

Jonathan a écrit sa propre version de cette application. Il l’a développé en Java et non en .NET, pour ensuite comparer Xamarin et .NET MAUI.

Lors du profilage de cette application, nous avons pu voir certains des problèmes de performances dans les mises en page dans .NET MAUI, et les correctifs apportés peuvent être vus traduits dans la deuxième image. Ici, l’application fonctionne sur un Pixel 4A et se compose de :

  • Une CollectionView avec 10 000 éléments.
  • Chaque ligne contient deux étiquettes liées aux données.

C’est quelque chose que vous devriez pouvoir faire défiler rapidement. Vous pouvez voir sur l’appareil dans la première image que lorsque vous faites défiler vers le haut dans .NET 6, vous pouvez voir que la barre est en haut et dans .NET 7, elle est plus basse. Il est un peu difficile d’obtenir des chiffres très exacts ici, mais le graphique présenté est un très bon exemple à examiner pour la performance du travail effectué.

Graphique à barres LOL par seconde montrant les formulaires Xamarin inférieurs à 200, .NET 6 MAUI supérieur à 300, .NET 7 MAUI presque à 500, C # presque à 600, Java presque à 700.

Ce sont des LOL par seconde. Dans l’image précédente, il est référencé comment l’application a été créée en Java, C #, .Net MAUI et Xamarin, ici nous voyons le résultat de ces tests.

  • Java est comme le haut de .NET MAUI parce que vous utilisez la vue texte du widget Android, qui est le contrôle sous-jacent qui est une étiquette dans MAUI.
  • La C# la version est la même, sauf que nous avons le coût de l’interopérabilité C # en Java (le travail continuera de s’améliorer).
  • A l’autre extrême, nous avons Formulaires Xamarin et .NET MAUI avec .NET 6. Comme vous pouvez le voir de Xamarin Forms à .NET 6, il y a des progrès considérables.

🔗 Si vous souhaitez en savoir plus, vous pouvez entrer le LOL par seconde Documentation.

Performances de démarrage du bureau dans .NET 7

Démarrage de bureau dans la diapositive .NET MAUI montrant les puces ci-dessous et un graphique linéaire des tendances de démarrage qui diminuent de manière significative

Les points suivants sont mis en évidence :

  • les fenêtres: Les versions de version utilisent ReadyToRun par défaut.
  • macOS/MacCatalyst: Les versions de version ciblent à la fois x64 et arm64 par défaut.
  • Dans un cas, la traduction d’Apple Rosetta prenait 3 à 4 secondes pour un projet .NET MAUI.

Chacun de ces points était axé sur l’amélioration de l’expérience de développement d’applications avec .NET MAUI. Certains processus/étapes qui devaient auparavant être ajustés manuellement ont été améliorés et sont déjà intégrés par défaut.

Démarrage de profilage et de mesure

Profilage dans la diapositive .NET MAUI Applications avec liste à puces : http://aka.ms/profile-maui ;  Nous travaillons à rendre cela plus facile !  Idéalement dans une future version de Visual Studio.;  Exemple de dotnet-trace sur Android : adb reverse tcp:9000 tcp:9001, adb shell setprop..., dotnet-dsrouter..., dotnet-trace... ;  https://speedscope.app

Jonathan a inclus une documentation appelée Profilage des applications .NET MAUI dans lequel vous pourrez approfondir le sujet !

Un exemple de la façon de le faire sur Android consiste à exécuter un ensemble de commandes qui définit la trace .NET à l’endroit où elle pourrait conduire votre application à s’exécuter sur une télécommande en tant qu’appareil Android. Par conséquent, une fois que vous exécutez ces commandes, un fichier de portée de vitesse sort et vous pouvez accéder à votre speedscope.app; c’est comme une application Web locale qui ne télécharge votre fichier nulle part, mais vous pouvez consulter votre trace sur ce site Web.

Mesurer le temps de démarrage dans .NET Diapositive MAUI avec des puces : Toujours chronométrer les versions de version ! ;  https://aka.ms/profile-maui#measuring-startup-times ;  Android : Message de journal affiché par ActivityTaskManager ;  iOS : Xcode & Instruments ;  Code de bureau Windows et macOS.

Pour mesurer le temps de démarrage dans .NET MAUI, vous pouvez entrer les éléments suivants Documentation. Et vous pouvez également voir dans GitHub le documentation de démarrage de mesure.

DateTimeOffset.Now et DateTime.Now

Puces des diapositives DateTimeOffset.Now et DateTime.Now : utilisez UtcNow si vous n'avez pas besoin de l'heure locale ;  nous avons constaté une quantité importante de temps passé dans le tout premier appel DateTimeOffset.Now : ~277 ms ;  Événement après l'enregistrement d'un profil AOT personnalisé, nous avons encore vu environ 161 ms ;  Au lieu de cela : 1. Appelez une API Java Android pour le décalage horaire actuel.  Notre code de démarrage dans la charge de travail Android est Java, il peut donc facilement récupérer la valeur à utiliser par la BCL.  2. Chargez les données de fuseau horaire sur un thread d'arrière-plan.  Cela se traduit par le comportement BCL d'origine une fois terminé, tout en utilisant le décalage de Java entre-temps.;  Cela a grandement amélioré DateTimeOffset.Now à seulement ~ 17,67 ms.

Jonathan parlait d’un exemple d’un client qui a signalé qu’il utilisait Datetime.Now dans son application et vous pouviez voir 277 millisecondes ajoutées au début simplement en ajoutant ceci. Il s’avère qu’ils pourraient utiliser UTCNow et c’est ce qu’ils ont fait.

Jonathan recommande de le faire si vous n’avez pas vraiment besoin de l’heure locale. Mais de la même manière, DataTime.Now est une API très courante qui est probablement encore utilisée malgré cela, donc l’équipe Microsoft a travaillé sur l’amélioration de ces temps et a réussi à les réduire de 277 millisecondes à 17 ou 18 millisecondes, ce qui est un excellent amélioration.

Autres points de surbrillance :

  • Même après avoir enregistré un profil AOT personnalisé, ils ont encore vu 161 ms.
  • À la place:
    • Appelez une API Java Android pour le décalage horaire actuel. Notre code de démarrage dans la charge de travail Android est Java, il peut donc facilement récupérer la valeur à utiliser par la BCL.
    • Charger les données de fuseau horaire sur un thread d’arrière-plan. Cela se traduit par le comportement BCL d’origine une fois terminé, tout en utilisant le décalage de Java dans l’intervalle.

Quelques liens que Jonathan nous laisse comme références :

Évitez ColorStateList (int[][]entier[])

Éviter la diapositive ColorStateList : la sortie dotnet-trace d'une application .NET 6

ColorStateList est une API Android qui vous permet de contourner un bouton. Par exemple, tous les différents états de ce bouton et leur couleur, c’est donc très utile. Cette API transmet un tableau multidimensionnel d’entiers. Dans l’exemple présenté, Java copie tous ces éléments pour accéder au tableau. Cela a pris environ 17 millisecondes.

La solution pour nous dans .NET MAUI est que nous pouvons déplacer correctement le code vers Java. MAUI a un espace pour chaque plate-forme, nous pouvons donc y mettre du code, puis nous pouvons créer nos propres API internes pour faire les choses plus rapidement en interagissant avec Java.

La diapositive ColorStateList Solution contient des blocs de code

Ceci est un exemple de ce à quoi ressemblerait la solution.

Emballer

Nous sommes arrivés à la fin de ce résumé. J’ai mis en évidence certains de mes sujets préférés, mais il y en a beaucoup d’autres !

Si vous souhaitez en savoir plus sur cette présentation, vous pouvez regarder la vidéo Améliorations des performances dans .NET MAUI (édition .NET 7)et je recommande également l’article de Jonathan Peppers intitulé Améliorations des performances de .NET 7 dans .NET MAUI.

Vous n’avez toujours pas vu le contenu proposé lors de la présentation State of .NET MAUI ? Je vous conseille de lire l’article Récapitulatif : État de .NET MAUI — .NET Conf 2022! Il parle de toutes les nouveautés à un niveau général de .NET MAUI.

Merci d’avoir lu! 💚💕




Source link

décembre 7, 2022