C’est partie pour les Nouveautés dotnet 6.
Pour rappel dotnet 6 est prévue pour sortie en novembre 2021 !
Un vrai travail sur l’amélioration des performances
des améliorations autour du File
des amélioration dans Blazor et Maui
- Un fileStream qui a été optimisé.
Ils ont détecté des goulets d’étranglement avec la gestion async qui se syncrhonisait avec Windows.
Ils ont décidé d’arrêter le traitement actuel sur les fichiers recherchés / indexés, pour travailler en mémoire.
Amélioration de 10 à 100 x.
- Amélioration du ReadAsync
- Mise en place du Scatter/Gather IO ou Vectored IO
Quelques breaking changes
- Principalement au sujet de l’utilisation de la Propriété FileStream.Position.
Si on souhaite garder l’approche dotnet 5
{
« configProperties »: {
« System.IO.UseNet5CompatFileStream »: true
}
}
Travail sur le PGO (Profile guided optimization)
Retravail complet du PGO
Motivé par la refonte de : crossgen2
Permet de faire du code AOT.
Par la suite, ça va permettre par exemple le version bubble
Travail sur le StaticPGO pour l’AOT et le Dynamic PGO pour le RyuJIT.
Autres améliorations
- .net 6 se prépare à HTTP/3 en preview pour l’instant.
- LINQ a été amélioré aussi avec l’ajout de plusieurs nouvelles méthodes
dont MaxBy et MinBy, Chunk
Des amélioration autour de EF core
Possibilité de générer une table temporelle
La possibilité d’ajouter des migrations à un lot (bundle) de migration
Mise en place d’un mappage de préconvention
Possibilité d’utiliser des modèles compilés => optim de 10 fois plus rapide.
…
Des améliorations autour d’asp.net core
Amélioration de la prise en compte de Blazor client avec javascript
Prise en compte d’angular 12 pour les templates de génération
L’amélioration de la possibilité de construire des APIs minimales
Injection des services sans le Tag Fromservices
Et bien sûr l’arrivée de C# 10 !
Rappelons déjà ce qui arrivait avec C# 9 :
- les records : presque classe sans l’etre, dans le but de représenter des données pures, immutables
- le init only : pouvoir ajouter le mot clef init, pour permettre une seule mise à jour de la valeur de la propriété
- le top level : où la possibilité de se passer des namespace et static
- plus besoin de spécifier le type quand on fait le new
- les lambda expressions statics
- l’arrivée de l’attribut ModuleInitializer : ça permet à une méthode d’être chargée au lancement de l’assembly
Et en C# 10 alors ?
- déclaration du namespace pour le fichier, sans accolade
- possibilité d’appeler une sous propriété via un pattern : { Prop1.Prop2: 12 } https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/extended-property-patterns
- la possibilité d’avoir des attributs génériques (comme les classes, les interfaces ou les méthodes)
- la possibilité de mettre des attributs sur des lambdas
- l’attribut CallerArgumentExpression : pour avoir plus d’info ce qui est passé en paramètre d’une fonction
MAUI
Dernière news : MAUI ne sera pas livré avec dotnet 6 mais avec la release mineure suivante, à priori.