Le 8 novembre 2022 a été une date importante pour tous les développeurs .NET, car Microsoft a publié .NET 7. Il s’agit d’une version STS (standard-term support) avec 18 mois de support. L’un des principaux changements apportés par .NET 7 est une unification plus poussée du développement de logiciels de bureau et mobiles, ainsi que de solutions web, cloud, gaming, IoT et AI que dans la 6e version.

Parallèlement, Microsoft a publié Entity Framework Core 7, ASP.NET Core 7, .NET MAUI (Multi-platform App UI), C# 11, F# 7, Windows Presentation Foundation, Windows Forms, Windows Presentation Foundation et Orleans 7.

L’augmentation des performances est une autre grande caractéristique de cette version qui est brièvement expliquée dans cet article. De plus, les opinions de plusieurs experts .NET sont ajoutées afin que vous puissiez avoir un point de vue plus diversifié. En outre, un contrôle des performances de nopCommerce après la mise à niveau vers .NET 7 est décrit et visualisé.

Augmentation significative de la productivité de .NET 7

Grâce au travail acharné de Microsoft, .NET 7 a atteint les objectifs fixés lors du développement de .NET 5. Bien qu’il s’agisse d’un STS (standard term support), .NET 7 crée de nombreuses opportunités pour les versions ultérieures.

Pour vous aider à mieux comprendre .NET 7 et vous convaincre de commencer à utiliser cette version, l’équipe de nopCommerce aimerait décrire l’une des principales mises à jour, à savoir la performance. Fondamentalement, toutes les améliorations de .NET 7 ont été faites pour augmenter la productivité du framework. Cependant, certaines améliorations de .NET 7 affectent directement les performances.

Voici les principaux changements :

Il crée un programme indépendant sans dépendances externes dans le format de fichier de la plateforme cible. Sans IL ni JIT, Native AOT est totalement inartificiel et a un temps de lancement court et un déploiement autonome. Native AOT se concentre sur les applications de console et nécessite un découpage des applications dans .NET 7.

Il sert de complément à une compilation basée sur les niveaux. Le remplacement on-stack permet au runtime de modifier le code exécuté par une méthode actuellement utilisée pendant qu’elle est encore « on-stack ». En cours d’exécution, les procédures longues peuvent passer à des variantes plus efficaces.

En ajoutant <TieredPGO>true</TieredPGO> à votre fichier de projet, l’optimisation guidée par profil (PGO) est maintenant plus simple à activer et compatible avec OSR. Les délégués font partie des nombreuses choses que PGO peut mesurer et améliorer.

Les indicateurs de performance supérieurs dans l’utilisation de la réflexion proviennent des économies de coûts significatives lors de l’appel du même élément d’objet plusieurs fois. Selon les hypothèses de Microsoft, les performances ont été multipliées par 4.

Enfin, il y a Language-Integrated Query (LINQ). En utilisant la syntaxe de compréhension des requêtes intégrées au langage ou en utilisant directement des méthodes sur System.Linq.Enumerable, c’est un outil de productivité qui permet d’exprimer des tâches autrement complexes de manière simple.

Les méthodes Enumerable suivantes ont bénéficié d’améliorations de performance : Max, Min, Average et Sum. Cela a été réalisé grâce à l’utilisation de la vectorisation de traitement avec le type de données Vector<T>. Il est désormais possible d’utiliser les méthodes mises à jour dans des situations où la vitesse d’exécution du code et la mémoire allouée sont critiques.

Amélioration des performances dans la version 4.60 de nopCommerce

Comme outil de test, nous avons décidé de choisir un service SaaS assez populaire pour les tests de charge et de scalabilité : loader.io. Le serveur sur lequel l’application est déployée est une machine moyenne utilisée pour le développement :

CPU – Intel(R) Core(TM) i5-7400 CPU 3,00 GHz ;
RAM – 16,0 Go.

Les tests ont été effectués sous Windows 10 Pro (version 21H2, build 19044.2604) et IIS 10 (10.0.19041.2604). Pour le test, nous avons pris la base de données standard qui est fournie avec l’installation de l’application. Tout cela fonctionne sous MS SQL Server 2019 (19.0.2000).

Pour simuler la charge, la connexion de 250 utilisateurs en une minute a été choisie comme configuration de test. Les utilisateurs visiteront plusieurs pages aléatoires de l’application. Cela sera suffisant pour tracer le tableau général du comportement de l’application et permettra de voir clairement la différence par rapport aux versions précédentes.

Ensuite, nous donnerons un tableau de correspondance entre les versions de l’application nopCommerce et les versions de la plateforme .NET.

nopCommerce 4.60 4.50 4.40.4
.net .NET 7 .NET 6 .NET 5

Nous avons effectué 3 tests de charge identiques consécutifs pour avoir une idée non seulement de la nature de la charge, mais aussi de la consommation de mémoire sur le serveur. Les résultats moyens après plusieurs essais sont présentés ci-dessous.

Temps de réponse

Avant de présenter les résultats du temps de réponse, il est important de dire que plus la mesure est faible, mieux c’est. Vous pouvez clairement voir l’augmentation des performances par rapport aux versions .NET 5 et .NET 6 – de 53,3% et 13,6% respectivement. Ce sont les meilleurs indicateurs que nous avons réussi à obtenir dans le processus de mesure des performances.

Bien que la différence entre les deux dernières versions soit faible, nous voyons toujours que Microsoft accorde toujours une attention particulière au travail sur les performances. Chaque nouvelle version du framework devient plus rapide que la précédente, c’est un très bon bonus que vous obtenez simplement en reconstruisant votre projet pour .NET 7 et rien d’autre.

Mémoire utilisée

Nous aimerions présenter et discuter de la mesure de la consommation de mémoire de l’application. Dans ce cas, moins de mémoire est impliquée, mieux c’est. Les tests ont été effectués séquentiellement pour chaque plateforme sans réinitialiser le pool d’applications. Nous sommes habitués au fait que le coût de l’augmentation des performances est la surcharge inévitable des ressources mémoire. L’optimisation dans .NET 6 a donné un certain espoir que l’appétit de la plateforme était contrôlé, mais en général, nous comprenions que si les performances augmentaient, alors la consommation de mémoire augmenterait.

Mais cette fois, la situation a changé exactement dans le sens inverse. Les ressources allouées à la mémoire ont été réduites par rapport à la version précédente. Vous pouvez voir les résultats dans le diagramme ci-dessous.

Répartition de la charge

Un autre point intéressant qui mérite une attention particulière est la manière dont la charge a été répartie dans une application sur la plateforme .NET 7, et en comparant des données similaires pour les tests basés sur .NET 6. Ici, nous avons de nouveau une surprise.

Répartition de la charge dans .NET 7
Répartition de la charge dans .NET 6

Les conditions de test sont telles que 250 utilisateurs doivent se connecter au serveur en 1 minute. Le graphique montre que, en raison du fait que la réponse du système sur la plateforme .NET 7 est plus rapide (ligne bleue), le traitement des utilisateurs de test par unité de temps est plus linéaire (ligne verte).

Nous ne voyons plus de rafales, comme c’était le cas avec .NET 6. Cela indique indirectement que le serveur sur .NET 7 gère la charge de manière un peu plus facile et que le système est en toute confiance dans un état d’équilibre. Tandis que le système sur .NET 6 devait augmenter l’afflux d’utilisateurs en raison du fait que le temps de réponse est non seulement plus long, mais aussi plus incohérent.

Résultats

La nouvelle plateforme .NET 7 est définitivement plus rapide que sa prédécesseure. Un fait important est que pour assurer son fonctionnement, il n’est pas nécessaire d’allouer plus de ressources que précédemment. En général, si nous évaluons la pertinence de la mise à jour de la plateforme, alors nous pensons que cela en vaut la peine. Vous obtenez non seulement une productivité accrue, mais aussi de nombreuses autres innovations utiles qui peuvent être utilisées dans le développement de projets de tout niveau.

Conclusion

Habituellement, les mises à jour de support à court terme d’un produit ou d’un framework sont utilisées comme médiateur entre deux versions principales. Cependant, ce n’est pas le cas pour .NET 7, car il présente de nouvelles fonctionnalités et diverses mises à jour. L’équipe nopCommerce a décidé d’évaluer les améliorations de performance, car elles ont un impact direct sur notre plateforme de commerce électronique.

Sur la base des améliorations de productivité après la migration vers .NET 7, ainsi que de l’expertise des développeurs expérimentés, on peut raisonnablement conclure que cette version STS vaut la peine d’être mise à jour. En dehors de cela, vous pouvez trouver d’autres fonctionnalités utiles qui peuvent améliorer l’efficacité du développement et offrir de nombreuses opportunités pour mettre à l’échelle vos projets.