Compilation just-in-time (JiT) et récupération de mémoire font partie des principaux sujets sur lesquels la version 6 de .NET va apporter des gains de performance, ainsi que le détaille un long billet publié la semaine dernière par Steven Toub, développeur de l’équipe .NET 6 chez Microsoft. Sur la partie bibliothèques JSON, System.Text.Json va également bénéficier d’améliorations.
Le développeur a passé en revue les évolutions de la plateforme de développement de Microsoft. Concernant JiT, il note un « nombre incroyable » d’améliorations de performances ayant un impact sur des aspects tels que l’inlining, processus par lequel le compilateur remplace un appel de fonction par le code de cette fonction. En exposant le contenu de la fonction appelée au contexte de l’appel, l’inlining permet des optimisations « d’activation » qui ne seraient pas possibles autrement. Le JiT est utilisé pour convertir le langage intermédiaire (IL) en code assembleur au moment de l’exécution. Il est également utilisé pour la compilation en amont dans le cadre de l’optimisation de code CrossGen2 et du format R2R (prêt à être exécuté).
Sur la compilation JiT, l'inlining va de pair avec la dévirtualisation, montre le billet à travers un exemple comparant .NET 5 (à gauche) et .NET 6. (agrandir l'image)
GC mis en oeuvre sur les régions plutôt que les segments
Du côté de la récupération de mémoire - garbage collection, GC ou ramasse-miettes - la version 6 de .Net profite en grande partie du travail important réalisé pour que la mise en oeuvre de GC soit basée sur les régions plutôt que sur les segments. Les régions sont des unités de mémoire plus petites, ce qui entraîne de meilleures performances du ramasse-miettes. Toujours au chapitre des performances, des améliorations ont également été apportées aux types system tels que Guid, qui est utilisé pour fournir des identifiants uniques pour un certain nombre d’opérations. Un nouveau générateur de source System.Text.Json vient également les doper tandis que le type FileStream a été réécrit pour corriger ce qui entravait celles des entrées/sorties.
Parmi les autres évolutions susceptibles d’arriver avec .Net 6, on pourrait trouver le support de la reprise de session TLS (Transport Layer Security) sur Linux, ce qui contribuerait à réduire le temps nécessaire pour établir des connexions sécurisées. Il pourrait aussi y avoir une utilisation renforcée des spans dans la mise en oeuvre de BigInteger.
La mise en production de .NET 6 doit se faire en novembre. Pour l’instant, cette version a fait l’objet de 7 préversions en bêta. La prochaine étape sera la release candidate. Cette version 6 vient compléter l’unification des technologies .NET de Microsoft en création un unique .NET à partir de .NET Core, .NET Framework et Xamarin/Mono.