Zoo do .NET sob o prisma do NET Core

Olá pessoal! Hoje, examinamos os vários chips e alterações que apareceram na plataforma .NET Core e os comparamos com o Framework. Dividi o artigo em módulos para uma melhor compreensão. Este artigo será interessante para quem vai mudar para o .NET Core ou já o está usando.

Tecnologia de pilha


Atualmente, temos três plataformas: .NET Framework, Mono e .NET Core. Cada plataforma inclui as seguintes tecnologias:

NET Framework - WPF, WinForms, ASP.NET (implementação DNX), WCF
NET Core - UWP, ASP.NET Core, WA, Xamarin (.NET Standard), Avalonia e outros
Mono - Xamarin (PCL, projeto de compartilhamento), Unity, ASP.NET, WinForms (plataforma cruzada)
NET Core (3.0) - Tudo é igual ao .NET Core acima + WPF e WinForms, ML.NET

Padrão NET


Há também um padrão .NET. Este é um conjunto de classes, métodos e interfaces que permitem escrever e usar código comum para todas as plataformas listadas acima. Você também pode escrever aplicativos de console nele. Em resumo, esse é o mesmo PCL, mas funciona em todas as plataformas listadas acima.

Plataforma cruzada


Não vou focar sua atenção nisso, simplesmente listarei o suporte do SO para projetos NET Core:

Windows
Linux
MacOS

Além disso, suporta o lançamento em processadores ARM no Linux e Windows.

Dependência


Como parte da compatibilidade cruzada, a plataforma de desenvolvimento de aplicativos inclui uma infraestrutura modular. É emitido pelo NuGet e você pode acessar as funções em lote, em vez de uma montagem grande. Como desenvolvedor, você pode criar aplicativos leves contendo apenas os pacotes NuGet necessários, o que tornará seu programa mais seguro e produtivo.

A infraestrutura modular também permite atualizações mais rápidas da plataforma .NET Core, pois os módulos afetados podem ser atualizados e liberados individualmente.

Csproj


Agora vamos aprofundar e ver com mais detalhes o que temos nos bastidores nos projetos. Ao criar um novo projeto, cada um de vocês encontrou o arquivo MyProject1.csproj (o nome pode ser diferente). Este arquivo é responsável pelas configurações de compilação deste projeto, dependências de outros projetos ou bibliotecas (bibliotecas) e muito mais.

Eu tenho para você um exemplo de como eu decidi reescrever um projeto no .NET Standard. Vamos dar uma olhada em como era antes (Framework):



Infelizmente, este arquivo não cabe no meu PC completamente (ainda existem referências). E agora vamos ver como ficou depois da transferência:



No NET Core e no .NET Standard, o csproj foi bastante simplificado. Os particularmente "balísticos" podem notar que alguns mudaram. Tirei o desnecessário e o substituí por ferramentas mais convenientes. Após reescrever o csproj, notei que o trabalho com os pacotes do NuGet começou a levar muito menos tempo e, como você entende, editar uma nova versão do csproj é muito mais conveniente, porque não está cheio de linhas extras.

Desempenho e Melhorias


Aleatório modificado
HttpClient modificado
Ciclos otimizados
Lista otimizada, matriz
Fluxo otimizado, MemoryStream
e muito mais

Neste artigo, não considerarei todas as alterações. Este será um artigo separado. Mas vamos ver um pequeno exemplo na coleção List:

var list = new List<int>(); for (int i = 0; i < 100000000; i++) { list.Add(i); list.RemoveAt(0); } 

Eu o executei no benchmarkdotnet.org nas duas plataformas. Após os testes, obtive os seguintes resultados:

Core 2.2.4 x64 RyuJIT
Método : BenchmarkList
Média : 370,1 ms
Erro : 0,3761 ms
StdDev : 0,3518 ms

Estrutura 4.7.2 x64 RyuJIT
Método : BenchmarkList
Média : 481,9 ms
Erro : 1.210 ms
StdDev : 1.011 ms

Como você pode ver, a velocidade da operação é significativamente diferente (às vezes) em favor do Core.

A Microsoft está tentando não apenas fornecer aos desenvolvedores ferramentas de desenvolvimento convenientes, mas também aprimora as coisas básicas que levam a melhorias e otimizações de seus projetos.

Compilação de camadas


Esse é um recurso que torna o tempo de execução mais adaptável ao uso do compilador JIT para melhorar o desempenho da inicialização e maximizar o rendimento.

 <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.2</TargetFramework> <LangVersion>7.3</LangVersion> <!--      --> <TieredCompilation>true</TieredCompilation> <Platforms>AnyCPU;x64</Platforms> </PropertyGroup> </Project> 

Compila o projeto o mais rápido possível.

Otimiza os métodos mais comuns.

Essa funcionalidade torna seu projeto mais rápido e oferece quase o mesmo desempenho. Testamos essa funcionalidade e esse é um recurso inteligente para projetos NET Core, o que reduz o tempo de compilação. A compilação multinível diminui um pouco o trabalho do seu aplicativo, não recomendo incluí-lo em um servidor de produção, mas para depuração há mais do que uma função real que economiza tempo dos programadores.

Conclusão


A Microsoft está tentando melhorar a vida dos desenvolvedores da plataforma .NET. Todas as “vantagens” acima que apareceram em nossa empresa nos permitem tornar o ambiente mais aberto e expansível. Espero que você goste. Não tenha medo de mudar para uma nova pilha de tecnologia e usar recursos diferentes.

Obrigado pela atenção. Espero que tenham gostado.

Source: https://habr.com/ru/post/pt451084/


All Articles