IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft annonce .NET 6 Preview 5, la version du framework pour la création des applications,
Apporte une amélioration des charges de travail

Le , par Bruno

56PARTAGES

6  0 
Microsoft a annoncé jeudi la disponibilité de .NET 6 Preview 5. « Nous sommes ravis d’annoncer.NET 6 Preview 5. Nous sommes maintenant dans la deuxième moitié de la version .NET 6, et nous commençons à voir des fonctionnalités importantes se mettre en place. Un excellent exemple est celui de .NET SDK Workloads, qui constitue la base de notre vision d'unification de .NET et permet de prendre en charge davantage de types d'applications. Comme d'autres fonctionnalités », déclare Microsoft. La nouvelle version du framework de Microsoft apporte la génération d'une logique de sérialisation optimisée et de nombreuses autres fonctionnalités.

Microsoft cherche depuis quelques années maintenant à unifier et à étendre la plateforme .NET. Richard Lander, Program Manager au sein de l'équipe .NET, a expliqué que Microsoft a fait un pas vers cet objectif avec .NET Core, l'unification était censée être matérialisée avec .NET 5 avec un lancement en novembre 2020. Mais la pandémie du coronavirus ainsi que d'autres problèmes survenus au cours de l'année ont eu raison de ce calendrier.

L’entreprise a publié la quatrième Preview de .NET 6 en mai dernier. Elle a également indiqué que .NET 6 sera lancée en novembre 2021 et représente l'aboutissement d'un effort de plusieurs années visant à fournir un framework multiplateforme à code source libre pour tout ce qui concerne .NET dans une offre globale unifiée. Dans .NET 6, l'équipe de développement se concentrera spécifiquement sur les performances des applications, l'ajout de nouveaux thèmes de contrôle et l'accélération des expériences des développeurs. Voici, ci-dessous, quelques nouveautés apportées par .NET 6 Preview 5 :

Bibliothèques : JsonSerializer Génération de sources

L'épine dorsale de presque tous les sérialiseurs .NET est la réflexion. La réflexion est une excellente capacité pour certains scénarios, mais pas comme base d'applications cloud-native hautes performances (qui (dé)sérialisent et traitent généralement beaucoup de documents JSON). La réflexion est un problème pour le démarrage, l'utilisation de la mémoire et l'optimisation de l'assemblage.

L'alternative à la réflexion à l'exécution est la génération de sources à la compilation. Les générateurs de sources génèrent des fichiers source C# qui peuvent être compilés dans le cadre de la construction de la bibliothèque ou de l'application. La génération du code source au moment de la compilation peut offrir de nombreux avantages aux applications .NET, notamment une amélioration des performances.

Dans .NET 6, Microsoft inclut un nouveau générateur de sources dans System.Text.Json. Le générateur de sources JSON fonctionne conjointement avec JsonSerializer et peut être configuré de plusieurs façons. Il offre les avantages suivants :

  • réduire le temps de démarrage ;
  • améliorer le débit de sérialisation ;
  • réduire l'utilisation de la mémoire privée ;
  • permet une sérialisation JSON compatible avec les trimestres ;
  • suppression de l'utilisation à l'exécution de System.Reflection et System.Reflection.Emit.

SDK .NET : Améliorations des charges de travail

Les charges de travail du SDK sont une nouvelle fonctionnalité du SDK .NET qui nous permet d'ajouter la prise en charge de nouveaux types d'applications, comme les applications mobiles et WebAssembly, sans augmenter la taille du SDK. La fonctionnalité des charges de travail a été mise à jour pour inclure des verbes de liste et de mise à jour. Ces nouvelles fonctionnalités donnent un aperçu de l'expérience finale attendue.

  • dotnet workload list vous indiquera les charges de travail que vous avez installées ;
  • dotnet workload update met à jour toutes les charges de travail installées avec la dernière version disponible.

Les commandes dotnet workload fonctionnent dans le contexte du SDK donné. Imaginez que vous ayez installé à la fois .NET 6 et .NET 7. Si vous utilisez les deux, les commandes de charges de travail fourniront des résultats différents puisque les charges de travail seront différentes (du moins des versions différentes des mêmes charges de travail). Les charges de travail ont été introduites pour la première fois dans la version .NET 6 preview 4.

SDK .NET : Validation des paquets NuGet

L'outil de validation des paquets permet aux développeurs de bibliothèques NuGet de vérifier que leurs paquets sont cohérents et bien formés. Cela comprend :

  • valider qu'il n'y a pas de changement de rupture entre les versions ;
  • déterminer toute lacune dans l'applicabilité du cadre cible ou du runtime ;
  • valider que le paquet a le même ensemble d'API publiques pour toutes les implémentations spécifiques à l'exécution.

Bibliothèques : Suppression du support pour les anciens frameworks

Selon Microsoft, l'abandon d'un framework dans un paquet est un changement qui casse la source. Dans le même temps, continuer à construire pour tous les frameworks livrés augmente la complexité et la taille d'un paquet.

Pendant la construction, l'utisateur télécharge la version précédente du paquet et avec les binaires pour les anciens frameworks pour lesquels on ne construit plus. Cela signifie que l’utilisateur ne recevra jamais de corrections de bogues ou de nouvelles fonctionnalités s’il exploite un binaire téléchargé. En d'autres termes, les ressources téléchargées ne peuvent pas être entretenues, ce qui est maintenant caché, car, du point de vue de l’utilisateur, il peut continuer à mettre à jour le paquet vers une version ultérieure même s’il exploite le même vieux binaire qui n’est plus mid à jour.

À partir du Preview 5 de .NET 6, prévois de ne plus effectuer aucune forme de moissonnage pour garantir que tous les actifs qu’elle livre peuvent être pris en charge. Cela signifie qu’elle abandonne la prise en charge de tout framework plus ancien que ceux-ci :

  • .NET Framework 4.6.1 ;
  • .NET Core 3.1 ;
  • .NET Standard 2.0.

Si l’utilisateur fait actuellement référence à un package impacté d'un framework antérieur, il ne pourra plus mettre à jour le package référencé vers une version ultérieure. Les utilisateurs ont le choix entre recibler le projet sur une version plus récente du framework ou ne pas mettre à jour le paquet référencé.

Génération d'une logique de sérialisation optimisée

Par défaut, le générateur de sources JSON émet une logique de sérialisation pour les types sérialisables donnés. Cela permet d'obtenir de meilleures performances qu'en utilisant les méthodes JsonSerializer existantes en générant un code source qui utilise directement Utf8JsonWriter. En bref, les générateurs de sources offrent un moyen de donner une implémentation différente à la compilation afin d'améliorer l'expérience à l'exécution.

Si l'on fait un zoom arrière, JsonSerializer est un outil qui possède de nombreuses fonctionnalités permettant d'améliorer la (dé)sérialisation des types .NET depuis/vers le format JSON. Il est rapide, mais peut avoir une certaine surcharge de performance lorsque seul un sous-ensemble de fonctionnalités est nécessaire pour une routine de sérialisation.
Étant donné un type simple :

Code : Sélectionner tout
1
2
3
4
5
6
7
namespace Test
{
    internal class JsonMessage
    {
        public string Message { get; set; }
    }
}
Le générateur de sources peut être configuré pour générer une logique de sérialisation pour les instances du type JsonMessage de l'exemple. Notez que le nom de la classe JsonContext est arbitraire.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
using System.Text.Json.Serialization;

namespace Test
{
    [JsonSerializable(typeof(JsonMessage)]
    internal partial class JsonContext : JsonSerializerContext
    {
    }
}
Définition d’un ensemble de fonctionnalités de JsonSerializer qui sont prises en charge avec le mode de génération de source qui fournit le meilleur débit de sérialisation, via JsonSerializerOptionsAttribute. Ces fonctionnalités peuvent être spécifiées au générateur de sources à l'avance, afin d'éviter des vérifications supplémentaires au moment de l'exécution. Si l'attribut n'est pas utilisé, les JsonSerializationOptions par défaut sont prises en charge au moment de l'exécution.
Dans le cadre de la construction, le générateur de sources augmente la classe partielle JsonContext avec la forme suivante :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
internal partial class JsonContext : JsonSerializerContext
{
    public static JsonContext Default { get; }

    public JsonTypeInfo<JsonMessage> JsonMessage { get; }

    public JsonContext(JsonSerializerOptions options) { }

    public override JsonTypeInfo GetTypeInfo(Type type) => ...;
}
L'invocation du sérialiseur avec ce mode pourrait ressembler à l'exemple suivant. Cet exemple fournit les meilleures performances possible.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
using MemoryStream ms = new();
using Utf8JsonWriter writer = new(ms);

JsonContext.Default.JsonMessage.Serialize(writer, new JsonMessage { "Hello, world!" });
writer.Flush();

// Writer contains:
// {"Message":"Hello, world!"}
Il est possible de continuer à utiliser JsonSerializer, mais en lui passant une instance du code généré, avec JsonContext.Default.JsonMessage.

Code : Sélectionner tout
1
2
3
JsonSerializer.Serialize(jsonMessage, JsonContext.Default.JsonMessage);
Here’s a similar use, with a different overload.
JsonSerializer.Serialize(jsonMessage, typeof(JsonMessage), JsonContext.Default);
La différence entre ces deux surcharges est que la première utilise l'implémentation typée des métadonnées JsonTypeInfo<T> et la seconde utilise une implémentation non typée plus générale qui effectue des tests de type pour déterminer si une implémentation typée existe dans l'instance de contexte. En conséquence, elle est un peu plus lente (en raison des tests de type). S'il n'existe pas d'implémentation générée par la source pour un type donné, le sérialiseur lève une NotSupportedException. Il ne se rabat pas sur une implémentation basée sur la réflexion (choix de conception explicite).

Le générateur de sources émet également une logique d'initialisation des métadonnées de type qui peut également bénéficier à la désérialisation. Pour désérialiser une instance de JsonMessage en utilisant les métadonnées de type prégénérées, vous pouvez procéder comme suit :

Code : Sélectionner tout
1
2
3
JsonSerializer.Deserialize(json, JsonContext.Default.JsonMessage);
Similar to serialization above, you might also write:
JsonSerializer.Deserialize(json, typeof(JsonMessage), JsonContext.Default);
Le mode de génération de source le plus rapide et le plus optimisé basé sur Utf8JsonWriter n'est actuellement disponible que pour la sérialisation. Un support similaire pour la désérialisation basé sur Utf8JsonReader pourrait être fourni à l'avenir en fonction de vos commentaires.

Source : Microsoft

Et vous ?

Avez-vous effectué la migration vers .NET 6 Preview 5 ? Quels changements avez-vous rencontrés (difficultés, améliorations des performances, etc.) ?

Voir aussi :

Microsoft annonce la disponibilité de .NET 6 Preview 4 qui apporte l'expérience Hot Reload à Visual Studio et aux outils de ligne de commande

Microsoft annonce la disponibilité de l'expérience .NET Hot Reload dans Visual Studio 2019 version 16.11 (Preview 1) et via les outils de ligne de commande dans .NET 6 (Preview 4)

État de .NET : C# est le principal langage utilisé par 95 % des développeurs .NET et ASP.NET Web API vient en tête des modèles d'applications utilisés dans la communauté

Depuis qu'il a effectué une migration vers .NET 5.0, le développeur de la bibliothèque .NET Fusion, a constaté une nette amélioration des performances

Une erreur dans cette actualité ? Signalez-nous-la !