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 !

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

Le , par Stéphane le calme

77PARTAGES

13  0 
La semaine dernière, à l'occasion du premier jour de l'événement ".NET Conf 2020" qui s’est tenu en ligne, Microsoft a annoncé la disponibilité de la version stable de .NET 5. Cette version comprend C# 9, F# 5, et la version correspondante du noyau ASP.NET. Elle fournit également une prise en charge native de Windows Arm64, ainsi que des améliorations de performance dans les bibliothèques .NET et dans le garbage collector, des images de conteneurs plus petites et des applications à fichier unique.

En 2019, Microsoft a annoncé que .NET 5 serait son premier grand produit sur la voie de l'unification de .NET. C'est désormais chose faite, .NET 5 est la première version de la promesse de Microsoft d'unifier les différentes variantes de .NET à travers les systèmes d'exploitation, le Web et une variété de formats de dispositifs. Il s'agit du successeur de .NET Core 3.X. Selon les explications de l'entreprise, le .NET Framework existant reste un produit Microsoft pris en charge et continuera à l'être avec chaque nouvelle version de Windows.

À la même période, Microsoft a indiqué qu'il avait cessé d'ajouter de nouvelles fonctionnalités au .NET Framework dès la version 4.8 et avait fini d'ajouter les API du .NET Framework au .NET Core. Il ne prévoit pas non plus de publier une nouvelle version de .NET Standard. L'entreprise a annoncé cet été la fin de .NET Standard, mais elle a également précisé que .NET 5 et toutes les versions futures continueront à prendre en charge le .NET Standard 2.1 et les versions antérieures. .NET 5 fournit aux développeurs des outils, des interfaces de programmation, des fonctionnalités d'exécution et de nouveaux langages.

Notons qu’EF Core (Entity Framework Core) 5 a été publié en même temps que .NET 5.0. Les premières versions d'EF Core se sont concentrées sur la création d'une architecture flexible et extensible. Dans EF Core 3.1, l'équipe a mis au point cette architecture avec quelques modifications majeures et un pipeline de requêtes remanié. La fondation de 3.1 a permis à l'équipe et à la communauté de fournir un ensemble étonnant de nouvelles fonctionnalités pour EF Core 5.0 parmi lesquelles :
  • Mappage des relations plusieurs-à-plusieurs
  • Mappage d'héritage table par type
  • IndexAttribute pour mapper des index sans l'API fluent
  • Classements de base de données
  • La méthode Include prend désormais en charge le filtrage des entités incluses
  • La journalisation simple
  • La possibilité d’exclure des tables des migrations
  • La possibilité de fractionner les requêtes pour les collections associées
  • Les compteurs d'événements
  • EF Core 5.0 introduit à la fois les événements .NET et un intercepteur EF Core déclenché lorsque SaveChanges est appelé.
  • Des scripts de migrations avec transactions
  • La reconstruction des tables SQLite selon les besoins dans les migrations
  • Le mappage pour les Table-valued functions (TVF, des fonctions définies par l'utilisateur qui renvoie des données de type table)
  • Prise en charge de DbContextFactory pour l'injection de dépendances
  • ChangeTracker.Clear pour arrêter le suivi de toutes les entités
  • Amélioration de la configuration Cosmos
  • Proxy de suivi des modifications

Des améliorations notables de performance ?

Certains développeurs font déjà mention des gains de performance. C’est le cas du développeur Alex Yakunin derrière la bibliothèque .NET Fusion qui a effectué la migration vers .NET 5 et a déclaré « honnêtement, j'ai été absolument étonné par le gain de performances qu'il apporte ».

Voici comment est présentée la bibliothèque Fusion sur GitHub :

« Fusion est une bibliothèque .NET 5 / .NET Core 3.1 fournissant une nouvelle abstraction de suivi des modifications basée sur l'hypothèse que chaque élément de données que vous avez fait partie de l'état / modèle observable, et puisqu'il n'y a aucun moyen de s'adapter à un état aussi énorme en RAM, Fusion:
  • Génère la partie observée de cet état à la demande
  • Conserve le graphique de dépendance de tout état observé en mémoire pour s'assurer que chaque dépendance de cet état déclenche une invalidation en cascade une fois qu'elle est modifiée.
  • Et enfin, il fait tout cela automatiquement et de manière transparente pour vous, de sorte que le code basé sur Fusion est presque identique au code que vous écririez sans lui.

« C'est assez similaire à ce que fait n'importe quel moteur de jeu MMORPG: même si l'état complet du jeu est énorme, il est toujours possible d'exécuter le jeu en temps réel pour plus de 1M joueurs, car chaque joueur observe une infime fraction d'un état de jeu complet, et donc tout ce dont vous avez besoin est de vous assurer que cette partie de l'état tient dans la RAM. En plus, vous avez suffisamment de puissance de calcul pour traiter les changements d'état pour chaque joueur ».


Dans son billet, il a fourni deux captures d’écrans de sorties (output) produites par un échantillon "Catching" de Fusion qui utilise EF Core (Entity Framework Core) 5 et ASP.NET Core.

« La vitesse des tests produisant plus de 20 millions d’opérations / s (# 1, # 3) est principalement limitée par la logique de Fusion et Castle.DynamicProxy. Et les tests produisant environ 100 000 opérations / s sont limités par EF et SQL Server (# 2, # 5) ou ASP.NET Core (# 4 - c'est ~ la même chose que # 5, mais en s'appuyant sur les fonctionnalités de mise en cache de Fusion). Tout cela signifie que:
  • Vous pouvez vous attendre à une augmentation de la vitesse de + 20% dans les applications « normales ».
  • Et cela peut aller jusqu'à + 100 %, si nous parlons de points de terminaison API ASP.NET Core relativement rapides (ceux qui dépendent fortement des caches, etc.). »


S'il a prévu de faire plus de tests par la suite et d'en partager les résultats, il a tenu à féliciter l'équipe derrière le développement de .NET : « il est clair, même maintenant, que l'équipe .NET a livré plus que ce à quoi je pouvais m'attendre - félicitations et un immense merci à tous ceux qui ont rendu cela possible ! »

Pour ceux qui auraient besoin de plus d'évaluations sur l'amélioration des performances apportée par .NET 5.0, il les a dirigés vers un billet technique rédigé par Stephen Toub en juillet (.NET 5.0 était donc encore en Preview).

Sources : billet Alex Yakunin, EF Core 5.0

Et vous ?

Avez-vous effectué la migration vers .NET 5.0 ? Quels changements avez-vous rencontrés (difficultés, améliorations des performances, etc.) ?
Que pensez-vous des propos du développeur de la bibliothèque Fusion ?

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

Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 17/11/2020 à 17:07
Je suis en train de regarder cette série de benchmarks Java (OpenJDK 15) vs C# (.NET 5) et je dois bien avouer que C# a prit les devants sur Java concernant le temps d'exécution et la consommation mémoire.
5  0