Bonjour à tous! Aujourd'hui, nous examinons les différentes puces et modifications qui sont apparues dans la plate-forme .NET Core et les comparons avec le Framework. J'ai divisé l'article en modules pour une meilleure compréhension. Cet article sera intéressant pour ceux qui vont passer à .NET Core ou qui l'utilisent déjà.
Technologie de pile
Nous avons actuellement trois plates-formes: .NET Framework, Mono et .NET Core. Chaque plateforme comprend les technologies suivantes:
NET Framework - WPF, WinForms, ASP.NET (implémentation DNX), WCF
NET Core - UWP, ASP.NET Core, WA, Xamarin (.NET Standard), Avalonia et autres
Mono - Xamarin (PCL, projet Share), Unity, ASP.NET, WinForms (multiplateforme)
NET Core (3.0) - Tout est identique à .NET Core ci-dessus + WPF et WinForms, ML.NET
NET Standard
Il existe également une norme .NET. Il s'agit d'un ensemble de classes, de méthodes et d'interfaces qui vous permettent d'écrire et d'utiliser du code commun pour toutes les plates-formes répertoriées ci-dessus. Vous pouvez également y écrire des applications console. En bref, il s'agit du même PCL, mais il fonctionne sur toutes les plateformes répertoriées ci-dessus.
Plateforme croisée
Je ne concentrerai pas votre attention sur cela, je vais simplement lister le support OS pour les projets NET Core:
• Windows
• Linux
• MacOS
Prend également en charge le lancement sous les processeurs ARM sous Linux et Windows.
Dépendance
Dans le cadre de la compatibilité croisée, la plateforme de développement d'applications comprend une infrastructure modulaire. Il est émis via NuGet et vous pouvez accéder aux fonctions de traitement par lots plutôt qu'à un seul grand assemblage. En tant que développeur, vous pouvez créer des applications légères contenant uniquement les packages NuGet nécessaires, ce qui rendra votre programme plus sûr et plus productif.
L'infrastructure modulaire permet également des mises à jour plus rapides de la plate-forme .NET Core, car les modules concernés peuvent être mis à jour et publiés individuellement.
Csproj
Allons maintenant plus loin et voyons plus en détail ce que nous avons sous le capot dans les projets. Lors de la création d'un nouveau projet, chacun de vous est tombé sur le fichier MyProject1.csproj (le nom peut différer). Ce fichier est responsable des paramètres de compilation pour ce projet, des dépendances d'autres projets ou bibliothèques (bibliothèques), et bien plus encore.
J'ai pour vous un exemple de la façon dont j'ai décidé de réécrire un projet dans .NET Standard. Voyons comment c'était avant (Framework):

Malheureusement, ce fichier ne tient pas complètement sur mon PC (il y a encore des références). Et maintenant, voyons comment cela est devenu après le transfert:

Dans NET Core et .NET Standard, csproj a été considérablement simplifié. Les plus particulièrement «balistiques» peuvent remarquer que certains ont changé. J'ai supprimé l'inutile et remplacé par des outils plus pratiques. Après avoir réécrit csproj, j'ai remarqué que travailler avec les packages NuGet commençait à prendre sensiblement moins de temps, et comme vous le comprenez, l'édition de la nouvelle version de csproj est beaucoup plus pratique, car elle n'est pas encombrée de lignes supplémentaires.
Performances et améliorations
• Aléatoire modifié
• HttpClient modifié
• Cycles optimisés
• Liste optimisée, tableau
• Flux optimisé, MemoryStream
• Et bien plus
Dans cet article, je ne considérerai pas tous les changements. Ce sera un article séparé. Mais regardons un petit exemple sur la collection List:
var list = new List<int>(); for (int i = 0; i < 100000000; i++) { list.Add(i); list.RemoveAt(0); }
Je l'ai exécuté via
benchmarkdotnet.org sur les deux plates-formes. Après les tests, j'ai obtenu les résultats suivants:
Core 2.2.4 x64 RyuJITMéthode : BenchmarkList
Moyenne : 370,1 ms
Erreur : 0,3761 ms
StdDev : 0,3518 ms
Framework 4.7.2 x64 RyuJITMéthode : BenchmarkList
Moyenne : 481,9 ms
Erreur : 1,210 ms
StdDev : 1,011 ms
Comme vous pouvez le voir, la vitesse de fonctionnement est considérablement différente (parfois) en faveur de Core.
Microsoft essaie non seulement de fournir aux développeurs des outils de développement pratiques, mais améliore également les éléments de base qui conduisent à des améliorations et à des optimisations de vos projets.
Compilation de niveaux
Il s'agit d'une fonctionnalité qui rend le runtime plus adaptatif pour utiliser le compilateur JIT pour améliorer les performances de démarrage et maximiser le débit.
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.2</TargetFramework> <LangVersion>7.3</LangVersion> <TieredCompilation>true</TieredCompilation> <Platforms>AnyCPU;x64</Platforms> </PropertyGroup> </Project>
Compile le projet le plus rapidement possible.
Optimise les méthodes les plus courantes.
Cette fonctionnalité accélère la construction de votre projet et vous offre presque les mêmes performances. Nous avons testé cette fonctionnalité, et c'est une fonctionnalité intelligente pour les projets NET Core, qui réduit le temps de compilation. La compilation à plusieurs niveaux ralentit légèrement le travail de votre application, je ne recommande pas de l'inclure sur un serveur de production, mais pour le débogage, il y a plus qu'une fonction réelle qui fait gagner du temps aux programmeurs.
Conclusion
Microsoft essaie d'améliorer la vie des développeurs de la plate-forme .NET. Tous les «goodies» ci-dessus qui sont apparus dans notre entreprise nous permettent de rendre l'environnement plus ouvert et extensible. J'espère que vous l'appréciez. N'ayez pas peur de passer à une nouvelle pile technologique et d'utiliser différentes fonctionnalités.
Merci de votre attention. J'espère que ça vous a plu.