
.NET 7 fait enfin ce que .NET 5 était censé faire en 2020 : couronner les efforts déployés par Microsoft depuis des années pour unifier des produits de développement disparates avec "un seul .NET à l'avenir". Microsoft estime que les mots clés de cette version sont "unifié", "moderne" et "simple". Le terme "unifié" signifie que .NET 7 est basé sur une seule bibliothèque de classes de base (Base Class Library - BCL). Toutefois, cela ne signifie pas que les fonctions spécifiques à la plateforme ne sont pas disponibles, et les API spécifiques au système d'exploitation sont accessibles en spécifiant le moniker de trame cible (TFM) suivant.
En matière de "modernité", .NET MAUI, une bibliothèque d'interface utilisateur multiplateforme, fait désormais partie de .NET 7. .NET 7 est conçu pour les applications natives modernes, les clients mobiles, les services périphériques et les technologies de bureau. Créez des expériences mobiles à l'aide d'une base de code unique sans compromettre les performances natives grâce à .NET MAUI. Créez des applications à page unique (SPA) réactives qui s'exécutent dans votre navigateur et hors ligne en tant qu'applications Web progressives (PWA) à l'aide de technologies familières comme C# et les modèles Razor.
Ces expériences modernes plus rapides ne sont pas uniquement destinées aux nouvelles applications. L'assistant de mise à niveau .NET vous fournira des informations sur la compatibilité et, dans certains cas, assurera la migration complète de vos applications vers .NET 6 et .NET 7. Quant au mot "simple", Microsoft a mentionné des améliorations du langage : la BCL a introduit une interface générique liée aux mathématiques qui permet d'effectuer des opérations mathématiques de manière générique, c'est-à-dire indépendamment du type exact. Il n'est pas nécessaire de surcharger les méthodes pour chaque type.
« .NET 7 apporte à vos applications des performances accrues et de nouvelles fonctionnalités pour C# 11/F# 7, .NET MAUI, ASP.NET Core/Blazor, les API Web, WinForms, WPF, etc. Avec .NET 7, vous pouvez aussi facilement conteneuriser vos projets .NET 7, mettre en place des flux de travail CI/CD dans les actions GitHub et obtenir une observabilité cloud-native », ont écrit Jon Douglas, Jeremy Likness et Angelos Petropoulos dans un billet de blogue mardi.
Cibler .NET 7
Lorsque vous ciblez un framework dans une application ou une bibliothèque, vous spécifiez l'ensemble des API que vous souhaitez rendre disponibles. Pour cibler .NET 7, il suffit de modifier le framework cible dans votre projet.
Code : | Sélectionner tout |
<TargetFramework>net7.0</TargetFramework>
Les applications qui ciblent le moniker de framework cible net7.0 (TFM) fonctionneront sur tous les systèmes d'exploitation et architectures de CPU pris en charge. Elles vous donnent accès à toutes les API de .NET 7 ainsi qu'à un grand nombre d'API spécifiques au système d'exploitation, telles que :
- net7.0-android ;
- net7.0-ios ;
- net7.0-maccatalyst ;
- net7.0-macos ;
- net7.0-tvos ;
- net7.0-windows.
ARM64
L'industrie s'est orientée vers les processeurs ARM, tout comme .NET. L'un des principaux avantages des processeurs ARM est l'efficacité énergétique. Cela permet d'obtenir les meilleures performances avec la plus faible consommation d'énergie. Autrement dit, vous pouvez faire plus avec moins. Dans .NET 5, Microsoft a décrit les initiatives qu'il a prises en matière de performances pour ARM64. Aujourd'hui, deux versions plus tard, l'entreprise partage le chemin parcouru. Son objectif permanent est d'atteindre la parité de performances entre x64 et ARM64 afin d'aider les clients à transférer leurs applications .NET vers ARM.
Améliorations du temps d'exécution
Selon Microsoft, l'une des difficultés rencontrées lors des recherches sur x64 et ARM64 a été de découvrir que la taille du cache L3 n'était pas correctement lue sur les machines ARM64. L'équipe a modifié l'heuristique pour renvoyer une taille approximative si la taille du cache L3 ne pouvait pas être récupérée à partir du système d'exploitation ou du BIOS de la machine. Elle peut maintenant mieux évaluer le nombre de cœurs par taille de cache L3. Ensuite, elle a compris l'atomique de LSE. Ce qui, si vous n'êtes pas familier, fournit des API atomiques pour obtenir un accès exclusif aux régions critiques.
Sur les machines x86-x64 à architecture CISC, les opérations de lecture-modification-écriture (RMW) sur la mémoire peuvent être effectuées par une seule instruction en ajoutant un préfixe de verrouillage. Cependant, sur les machines à architecture RISC, les opérations RMW ne sont pas autorisées et toutes les opérations sont effectuées par le biais de registres. Par conséquent, pour les scénarios de concurrence, ils ont une paire d'instructions. L'instruction "Load Acquire" (ldaxr) permet d'obtenir un accès exclusif à la région de mémoire de telle sorte qu'aucun autre cœur ne puisse y accéder et l'instruction "Store Release" (stlxr) libère l'accès pour les autres cœurs.
Entre ces paires, les opérations critiques sont effectuées. Si l'opération stlxr a échoué parce qu'un autre processeur a opéré sur la mémoire après avoir chargé le contenu à l'aide de ldaxr, il existe un code pour réessayer (cbnz saute en arrière pour réessayer) l'opération. ARM a introduit les instructions atomiques LSE dans la version 8.1. Avec ces instructions, de telles opérations peuvent être effectuées en moins de code et plus rapidement que la version traditionnelle. Lorsque l'équipe a activé cette fonction pour Linux, puis l'a étendue à Windows, elle a constaté un gain de performance d'environ 45 %.
Améliorations des bibliothèques
Pour optimiser les bibliothèques qui utilisent des intrinsèques, l'équipe a ajouté de nouvelles aides multiplateformes. Il s'agit notamment d'aides pour Vector64, Vector128 et Vector256. Les aides multiplateformes permettent d'unifier les algorithmes de vectorisation en remplaçant les intrinsèques spécifiques au matériel par des intrinsèques agnostiques au matériel. Cela profitera aux utilisateurs de toutes les plateformes, mais l'équipe s'attend à ce que la plateforme ARM64 en bénéficie le plus, car les développeurs sans expertise ARM64 pourront toujours utiliser les aides pour tirer parti des intrinsèques du matériel Arm64.
La réécriture d'API telles que EncodeToUtf8 et DecodeFromUtf8 d'une implémentation SSE3 à une implémentation vectorielle peut apporter jusqu'à 60 % d'amélioration. De même, la conversion d'autres API, telles que NarrowUtf16ToAscii() et GetIndexOfFirstNonAsciiChar(), permet de gagner jusqu'à 35 % en performances.
Impact sur les performances
Grâce au travail de l'équipe sur .NET 7, de nombreux microbenchmarks se sont améliorés de 10 à 60 %. Au début de .NET 7, les requêtes par seconde (RPS) étaient plus faibles pour ARM64, mais ont lentement dépassé la parité de x64. De même, pour la latence (mesurée en millisecondes), l'équipe a dépassé la parité avec x64.
Prise en charge améliorée de .NET sous Linux
.NET 6 est inclus dans Ubuntu 22.04 (Jammy) et peut être installé avec la commande apt install dotnet6. En outre, il existe une image de conteneur optimisée, préconstruite et très petite qui peut être utilisée telle quelle.
Prise en charge d'IBM Power 64 bits
Outre l'architecture x64 (Intel/AMD 64 bits), ARM64 (ARM 64 bits) et s390x (IBM Z 64 bits), .NET est désormais également disponible pour l'architecture ppc64le (IBM Power 64 bits) ciblant RHEL 8.7 et RHEL 9.1. Grâce à la disponibilité de l'exécution native sur Power, les plus de 25 000 clients d'IBM Power peuvent consolider les applications .NET existantes sur Windows x86 pour les exécuter sur la même plateforme Power que leurs applications et bases de données professionnelles IBM i et AIX.
Ce faisant, ils peuvent améliorer considérablement le développement durable en réduisant jusqu'à 5 fois leur empreinte carbone, tout en bénéficiant d'une mise à l'échelle sur site de la capacité de RHEL (Red Hat Enterprise Linux) et d'OpenShift, et en assurant la sécurité des transactions et des données de bout en bout de l'entreprise.
Blazor
Blazor continue d'évoluer et .NET 7 comprend de nombreuses améliorations majeures. Blazor prend désormais en charge la gestion des événements de changement de lieu, améliore l'expérience de débogage WebAssembly et prend en charge l'authentification par OpenID Connect.
Assistant de mise à niveau
L'assistant de mise à niveau .NET fournit des conseils, des informations et une automatisation étape par étape pour faire passer vos anciennes applications à .NET 6 et .NET 7. Dans certains cas, il peut effectuer la migration pour vous. Il permet de réduire le temps et la complexité lors de la modernisation d'anciennes bases de code. Par exemple, apprenez comment faire passer vos applications WCF à .NET Core avec l'aide de CoreWCF. Avec .NET 7, les expériences améliorées comprennent :
- ASP.NET vers ASP.NET Core :
- adaptateurs System.Web (aperçu) ;
- migrations incrémentielles (aperçu) ;
- Ajout d'un plus grand nombre d'analyseurs et de correcteurs de code pour WinForms, WPF et les bibliothèques console/classe ;
- La possibilité d'analyser les binaires ;
- Prise en charge de UWP vers Windows App SDK et WinUI.
.NET pour les applications natives du cloud
Avec .NET 7, il est plus facile que jamais de créer des applications natives du cloud. Utilisez les services connectés de Visual Studio pour vous connecter en toute sécurité à un service de données et chiffrer vos chaînes de connexion dans un fichier de secrets d'utilisateur ou dans Azure Key Vault. Créez votre application directement dans une image de conteneur. Utilisez Entity Framework 7 pour écrire des requêtes LINQ (Language Integrated Query) fortement typées qui utilisent le support JSON de SQL Server pour extraire rapidement le contenu des documents JSON stockés dans votre base de données relationnelle.
Livrez des documents JSON sécurisés via des points de terminaison authentifiés en utilisant seulement quelques lignes de code avec l'expérience Minimal APIs. Obtenez des informations sur votre application en cours d'exécution avec Open Telemetry.
Prise en charge d'Azure
Non seulement .NET 7 est idéal pour créer des applications natives du cloud, mais les services PaaS d'Azure tels que App Service pour Windows et Linux, Static Web Apps, Azure Functions et Azure Container Apps sont prêts pour .NET 7. Tout au long de la première semaine de la sortie, il se peut que les temps de démarrage des applications .NET 7 soient légèrement plus longs, car le SDK .NET 7 sera installé juste à temps pour les clients qui créent de nouveaux App Services utilisant .NET 7. De même, si vous exécutez une version préliminaire de .NET 7, il vous suffit de redémarrer votre App Service pour passer aux bits GA.
Prise en charge intégrée des conteneurs
La popularité et l'utilisation pratique des conteneurs sont en hausse, et pour de nombreuses entreprises, ils représentent le moyen privilégié de déployer vers le cloud. Cependant, l...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.