.NET зоопарк под призмой NET Core

Всем привет! Сегодня мы рассмотрим разные фишки и изменения, которые появились в .NET Core платформе и сравним их с Framework. Я разбил статью на модули для более лучшего понимания. Эта статья будет интересна тем кто собирается переходить на .NET Core или уже использует его.

Stack technology


В данный момент у нас есть три платформы: .NET Framework, Mono и .NET Core. Каждая платформа включает в себя следующие технологии:

NET Framework — WPF, WinForms, ASP.NET (DNX реализация), WCF
NET Core — UWP, ASP.NET Core, WA, Xamarin (.NET Standard), Avalonia and other
Mono — Xamarin (PCL, Share project), Unity, ASP.NET, WinForms (cross platform)
NET Core (3.0) — Всё тоже самое, что и у .NET Core выше + WPF и WinForms, ML.NET

NET Standard


Ещё есть .NET Standard. Это набор классов, методов и интерфейсов, которые позволяют писать и использовать общий код под все перечисленные выше платформы. Ещё на ней можно писать консольные приложения. Вкратце это тот же PCL, но работает на всех перечисленных выше платформах.

Cross Platform


Не буду заострять на этом ваше внимание, просто перечислю поддержку ОС для NET Core проектов:

Windows
Linux
MacOS

Дополнительно поддерживает запуск под ARM процессоры на Linux и Windows.

Dependency


В рамках кросс-совместимости платформа для разработки приложений включает в себя модульную инфраструктуру. Она выдается через NuGet, и вы можете получить доступ к пакетным функциям, а не к одной большой сборке. Как разработчик вы можете создавать легкие приложения, содержащие только необходимые пакеты NuGet, что сделает вашу программу безопаснее и производительнее.

Модульная инфраструктура также позволяет быстрее обновлять платформу .NET Core, поскольку затронутые модули могут обновляться и выпускаться по отдельности.

CSPROJ


Теперь давайте углубимся и посмотрим более подробно, что у нас под капотом в проектах. При создании нового проекта каждый из вас сталкивался с файлом MyProject1.csproj (название может отличаться). Этот файл отвечает за настройки компиляции данного проекта, зависимостей других проектов или либ (библиотек) и много чего ещё.

У меня для вас есть пример того, как я решил переписать один проект на .NET Standard. Давайте взглянем, как было до (Framework):



К сожалению на моём ПК этот файл не влезает полностью (там остались ещё референсы). А теперь взглянем как стало после переноса:



В NET Core и .NET Standard csproj был сильно упрощен. Особо «шаристые» могут заметить, что немного изменились либы. Я убрал ненужное и заменил на более удобные инструменты. После переписывания csproj я заметил, что работа с NuGet пакетами стали занимать заметно меньше времени и как вы понимаете править новую версию csproj в разы удобнее, ибо он не загроможден лишними строками.

Performance & Improvements


Измененный Random
Измененный HttpClient
Оптимизированы циклы
Оптимизированы List, Array
Оптимизированы Stream, MemoryStream
И многое другое

В данной статье я не буду рассматривать все изменения. Это будет отдельной статьей. Но давайте рассмотрим небольшой пример на коллекции List:

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

Я прогнал его через benchmarkdotnet.org на обеих платформах. После тестов у меня вышли следующие результаты:

Core 2.2.4 x64 RyuJIT
Method: BenchmarkList
Mean: 370.1 ms
Error: 0.3761 ms
StdDev: 0.3518 ms

Framework 4.7.2 x64 RyuJIT
Method: BenchmarkList
Mean: 481.9 ms
Error: 1.210 ms
StdDev: 1.011 ms

Как видите, скорость работы существенно отличается(в разы) в пользу Core.

Microsoft старается не только дать разработчикам удобные инструменты для разработки, но и улучшает базовые вещи, которые приводят к улучшениям и оптимизациям ваших проектов.

Tier Compilation


Это возможность, благодаря которой среда выполнения более адаптивно использует компилятор JIT для повышения производительности при запуске и максимального увеличения пропускной способности.

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <LangVersion>7.3</LangVersion>
    <!--Следующая строка отвечает за включение данной функции-->
    <TieredCompilation>true</TieredCompilation>
    <Platforms>AnyCPU;x64</Platforms>
  </PropertyGroup>
</Project>

Компилирует проект так быстро, насколько это возможно.

Оптимизирует наиболее частые методы.

Данный функционал приводит к тому, что ваш проект быстрее собирается и даёт вам почти аналогичную производительность. Мы тестировали данный функционал, и это шикарная функция для NET Core проектов, которая уменьшает время компиляции. Многоуровневая компиляция незначительно замедляет работу вашего приложения, я не советую включать ее на production сервере, но для отладки более чем актуальная функция которая экономит время программистов.

Заключение


Компания Microsoft старается улучшить жизнь разработчикам .NET платформы. Все перечисленные “плюшки”, которые у нас в компании появились, позволяют сделать среду более открытой и расширяемой. Надеюсь, вы по достоинству оцените. Не бойтесь переходить на новый стек технологий и использовать разные особенности.

Спасибо за внимание. Надеюсь, вам понравилось.

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 27

    +6
    Название на книгу потянет, а в статье перечислены пару особенностей Core, половину из которых уже портируют на другие платформы.
      –1
      Спасибо, но в планах пока написать статью про уместную оптимизацию кода в проектах на .NET платформах
        –1
        Лучше написать про неуместную, она чаще встречается.
      –14
      Думаю что единственной перспективной технологией Microsoft остаётся только ASP.NET Core. Десктоп разработка для Windows никому не интересна. WPF, UWP и уж тем более WindForma — может быть и поддерживаются но они мертвы в виду отсутствия спроса. Xamarin скорее всего тоже уступит место PWA и Flutter. Стоит ли разработчикам переходить на технологический стек компании которая из года в год теряет свои позиции?
        +7
        >разработка для Windows никому не интересна.

        Бред отборный. Уже 15 лет пишу под десктоп и работы только больше из года в год.
          +2

          Подтверждаю. Заказов под desktop много. И под Core совершенно не экзотика. А вот WPF\UWP — пренебрежимо мало.
          Эх, вот бы еще Core 3.0 для WinForm был бы с человеческим лицом. (Это надежда, а не жалоба.)

            +1
            А на чём сейчас интерфейс для win десктоп пишут? Wpf winform или ещё что-то?
              0

              Эммм… Не понял вопроса. Выше-же написал. Если вы именно про интерфейс десятки, то UWP. Если про софт для нее, то большинство предпочитает WinForms. ибо поддерживается начиная с XP. XP сейчас просят очень редко. Windows 7+ просят в 99,9%.

                0
                Именно интерфейс, просто в интерфейс должны входить цветные 3D графики, отображение простой геометрии/сетки, т.к. ничего не знаю, то нужно выбрать на что смотреть и что изучать (сама программа написана на C#).
                0
                Qt, MFC, Delphi (шутка)
                Avalonia ещё есть (не шутка)
                Electron (шутка лишь отчасти)
                UWP (Win10, HoloLens)
                  0
                  А если необходимо использовать цветные 3D графики, отображение простой геометрии/сетки и пр. что лучше выбирать?
                  При том что сейчас нулевые познания и всё равно что использовать. WPF плохой вариант?
                    0
                    WPF не плохой вариант. UWP (после потери Mobile не такой уж и U) тоже хорошо, но только под 10. WinForms — наверно уже нет (мое личное имхо). Недавно был анонс про React Native for Windows — тоже наверно забавно.
                +1
                По WPF у меня наоборот — больше проектов на нем, а WinForm никто не просит.
                UWP да, там глушь, хотя для UI он очень хорош в плане производительности.
                ИМХО, думаю и у вас через пару лет все изменится.
                Судя по последним активностям MS возрождают XAML платформу (3 года обновлений не было и тут понеслась)
                WPF все более стабилен и быстр (первые версии ругали за тормоза, но сейчас если не делать грубых ошибок отключающих аппаратное ускорение он быстрее WinForm)
                Формы сильно уступают в адаптивных и сложных UI, а так или иначе мобильный тренд сильно поднял планку визуализации и из-за конкуренции на XAML перейти придется, т.к. Интерфейсы там в разы проще реализовывать чем на WinForm.
              +1
              Для многих вопрос быстрее строит в «стоит ли уходить». И если во фронтенд / мобайл разработке ответ очевиден, то вот с бекендом всё не так просто, там позиции стека весьма стабильны и как-то не особо ощущается метаний заказчиков, ибо серьёзный альтернатив альтернатив для ентерпрайза раз-два и обчёлся.
                0
                Скорее даже раз и обчелся.
              0
              Честно говоря, было бы намного полезнее если бы вы хотя бы кратко дали описание инфраструктуры и комьюнити NET Core. Фреймворки, системы сборки, репозитории со сторонними библиотеками — вот это все. Сделали технологию кроссплатформенной? Ну, ок. Теперь осталось объяснить людям в чем ее профит на том же Linux. Какие библиотеки юзать, для чего, как доставлять этот NET конечному пользователю вместе с приложением. %techname_awesome% таких ответов не дает.
                0

                Какие библиотеки юзать? В основном те же, что и на Windows, т.к. большинство библиотек уже давно поддерживают .NET Standard.

                +1

                Sdk-style csproj можно использовать и для проектов на .Net Framework. Для библиотек вообще нет ограничений, а с asp.net mvc не проканает.


                Объясните, как можно написать консольное приложение на net standard?

                  0
                  Это как с поддержкой юникода в консоли — поддержка есть, рендера нет (с недавних пор).
                  Так что написать можно, но только как библиотеку — что бы запустить, нужен проект на .net core или framework.
                  В общем немного странное утверждение конечно.
                    0
                    Я видел консоль с китайской Win7. С иероглифами в консоли. Жаль, не догадался сфотографировать.
                    0
                    .net core, .net framework — это то, где приложение исполняется.
                    .net standard — это то, «на чем можно писать» чтобы можно было исполняться на любом .net, поддерживающим этот стандарт.

                    т.е. на .net standard нельзя написать приложение. можно написать либу, которую можно использовать как в мобильном приложении (xamarin), так и на бекенде (asp.net [core])
                    0

                    Я не уверен, что Tiered Compilation это то, что вы описываете.
                    https://habr.com/ru/company/jugru/blog/433144/

                      0
                      Возможно, я брал информацию из разных источник в том числе, из офф. блога microsoft. + Опыт использования данной фичи позволил наиболее проще описать данную особенность. Вот ссылка на одну из статей про многоуровневую компиляцию.
                      devblogs.microsoft.com/dotnet/tiered-compilation-preview-in-net-core-2-1
                      Там более подробно расписан процесс работы механизма.
                      +2
                      Какая-то каша в статье.
                      .NET Core 3 — это то, что после .NET Core 2.x, который в свою очередь после .NET Core 1.x — ничего революционного.
                      .NET Standard — это набор API, перечисленное выше — реализации.
                      И да, забыли CoreRT и Tizen.
                      Дальше тоже, но разбирать не хочется — уж извините.
                        –1
                        Простите, это моя первая статья тут. В след. раз учту ваши пожелания и постараюсь более подробно описывать каждый блок статьи.
                        +1
                        «Старье». На build2019 уже анонсировали «Introducing .NET 5»
                        devblogs.microsoft.com/dotnet/introducing-net-5 а вместе с ним и vision, что mono/unity/.net core будут сближаться.
                          0
                          итого всего 5 отличий??? несколько дней назад анонсировали .NET 5, а вы нашли только 5 отличий в core

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое