.NET 7: различия между версиями

Материал из DZWIKI
Перейти к навигации Перейти к поиску
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
{{Заготовка}}
{{Заготовка}}
'''.NET 7''' —  
'''.NET 7''' — открытая платформа разрабатываемая компанией [[Microsoft]], созданная унификацией продуктов [[.NET Framework]], [[.NET Core]] и [[Mono]]. На основе .NET 7 можно создавать многоплатформенные приложения для браузера, облачных систем, рабочего стола, IoT-устройств и мобильных платформ, используя единые библиотеки и общий процесс сборки, не зависящий от типа приложения. Сборки .NET SDK 7, .NET Runtime 7 и ASP.NET Core Runtime 7 сформированы для Linux, macOS и Windows. .NET Desktop Runtime 6 поставляется только для Windows. Связанные с проектом наработки распространяются под лицензией MIT. Сопровождение ветки .NET 7 будут осуществляться в течение 18 месяцев до 14 мая 2024 года<ref>{{cite web
|url          = https://www.opennet.ru/opennews/art.shtml?num=58084
|title        = Microsoft опубликовал открытую платформу .NET 7
|lang        = ru
|date        = 2022-11-10
|access-date  = 2022-11-25
|website      = OpenNET
|archive-url  = https://web.archive.org/web/20221111230225/https://www.opennet.ru/opennews/art.shtml?num=58084
|archive-date = 2022-11-11
}}</ref>.


== Нововведения .NET 7 ==
== Нововведения .NET 7 ==
Строка 77: Строка 86:
=== Rate Limiting ===
=== Rate Limiting ===


Rate limiting – это механизм ограничения объёма доступа к ресурсу. Таким образом можно задать определённый лимит доступа, например, к базе данных.
Rate limiting – это механизм ограничения объёма доступа к ресурсу<ref>{{cite web
|url          = https://devblogs.microsoft.com/dotnet/announcing-rate-limiting-for-dotnet/
|title        = Announcing Rate Limiting for .NET
|lang        = en
|date        = 2022-07-13
|access-date  = 2022-11-26
|website      = .NET Blog
|archive-url  = https://web.archive.org/web/20221027013537/https://devblogs.microsoft.com/dotnet/announcing-rate-limiting-for-dotnet/
|archive-date = 2022-10-27
}}</ref>. Таким образом можно задать определённый лимит доступа, например, к базе данных.


Для написания ограничителя в .NET 7 был добавлен NuGet пакет <code>System.Threading.RateLimiting</code>. В основном работа будет происходить с абстрактным классом RateLimiter. Один из примеров работы от Microsoft:
Для написания ограничителя в .NET 7 был добавлен NuGet пакет <code>System.Threading.RateLimiting</code>. В основном работа будет происходить с абстрактным классом RateLimiter. Один из примеров работы от Microsoft:
Строка 93: Строка 111:
}
}
</syntaxhighlight>
</syntaxhighlight>
В примере выше мы пытаемся получить 1 разрешение с помощью метода Acquire. Далее идёт проверка – было ли получено разрешение:
* если разрешение было получено, то можем использовать ресурс;
* если разрешение не было получено, то это можно залогировать или обработать как ошибку.


== Примечания ==
== Примечания ==

Текущая версия от 16:00, 26 ноября 2022

.NET 7 — открытая платформа разрабатываемая компанией Microsoft, созданная унификацией продуктов .NET Framework, .NET Core и Mono. На основе .NET 7 можно создавать многоплатформенные приложения для браузера, облачных систем, рабочего стола, IoT-устройств и мобильных платформ, используя единые библиотеки и общий процесс сборки, не зависящий от типа приложения. Сборки .NET SDK 7, .NET Runtime 7 и ASP.NET Core Runtime 7 сформированы для Linux, macOS и Windows. .NET Desktop Runtime 6 поставляется только для Windows. Связанные с проектом наработки распространяются под лицензией MIT. Сопровождение ветки .NET 7 будут осуществляться в течение 18 месяцев до 14 мая 2024 года[1].

Нововведения .NET 7

Обзор нововведений .NET 7[2].

Native AOT

AOT (ahead-of-time) – компиляция приложения не в промежуточный, а сразу в машинный код. Native AOT использует ahead of time компилятор для компиляции IL в машинный код во время публикации self-contained[3] приложения. Native AOT был переведён из статуса экспериментального. Основными преимуществами native AOT приложений являются:

  • время запуска;
  • использование памяти;
  • работа на платформах с ограничениями (JIT недоступен).

Native AOT приложения имеют ряд ограничений:

  • нет динамической загрузки (например, Assembly.LoadFile);
  • нет генерации кода во время выполнения (например, System.Reflection.Emit);
  • нет C++/CLI;
  • и т. д.

On Stack Replacement (OSR)

OSR[4] позволяет заменять машинный код, который выполняется в данный момент, на новый — более оптимизированный. Ранее такая возможность была только между вызовами метода. Подобный подход позволяет применять многоуровневую компиляцию ко всем методам. Благодаря этому можно добиться более быстрой компиляции и при этом стабильной производительности. Судя по тестам Microsoft, внедрение данной технологии помогло на 25 % ускорить запуск нагруженных приложений. OSR в .NET 7 включена по умолчанию для x64 и Arm64.

Централизованное управление пакетами (CPM)

Управление зависимостями для многопроектных решений может оказаться сложной задачкой. Теперь же в ситуациях, когда требуется управление общими зависимостями для нескольких проектов, вы можете использовать централизованное управление NuGet пакетами[5]. Для централизованного управления зависимостями потребуется добавить файл Directory.Packages.props в корень решения. Благодаря CPM версия пакета указывается только в Directory.Packages.props, а в проектах требуется лишь сослаться на пакет.

GC Regions

Регионы GC – это функция, которая разрабатывается уже несколько лет. Если раньше приходилось иметь несколько больших сегментов памяти (например, 1 ГБ), то теперь GC поддерживает множество маленьких областей (например, 4 МБ). Это позволяет GC быть более гибким в вопросах перепрофилирования областей памяти из одного поколения в другое.

В .NET 7 регионы используются по умолчанию для 64-битных приложений. Подробности по данному вопросу можно получить из статьи архитектора .NET GC: [6].

Rate Limiting

Rate limiting – это механизм ограничения объёма доступа к ресурсу[7]. Таким образом можно задать определённый лимит доступа, например, к базе данных.

Для написания ограничителя в .NET 7 был добавлен NuGet пакет System.Threading.RateLimiting. В основном работа будет происходить с абстрактным классом RateLimiter. Один из примеров работы от Microsoft:

RateLimiter limiter = GetLimiter();
using RateLimitLease lease = limiter.Acquire(permitCount: 1);
if (lease.IsAcquired)
{
  // Do action that is protected by limiter
}
else
{
  // Error handling or add retry logic
}

В примере выше мы пытаемся получить 1 разрешение с помощью метода Acquire. Далее идёт проверка – было ли получено разрешение:

  • если разрешение было получено, то можем использовать ресурс;
  • если разрешение не было получено, то это можно залогировать или обработать как ошибку.

Примечания

  1. Microsoft опубликовал открытую платформу .NET 7. OpenNET (10 ноября 2022). Дата обращения: 25 ноября 2022. Архивировано 11 ноября 2022 года.
  2. Что нового в .NET 7? Хабрахабр (16 ноября 2022). Дата обращения: 16 ноября 2022. Архивировано 16 ноября 2022 года.
  3. .NET application publishing overview (англ.). Microsoft Learn (8 апреля 2022). Дата обращения: 16 ноября 2022. Архивировано 27 октября 2022 года.
  4. Performance Improvements in .NET 7 - On-Stack Replacement (англ.). Microsoft .NET Blog (31 августа 2022). Дата обращения: 10 ноября 2022. Архивировано 10 ноября 2022 года.
  5. Central Package Management (CPM) (англ.). Microsoft Learn (11 августа 2022). Дата обращения: 17 ноября 2022. Архивировано 8 ноября 2022 года.
  6. Put a DPAD on that GC! (англ.) (10 мая 2021). Дата обращения: 17 ноября 2022. Архивировано 10 ноября 2022 года.
  7. Announcing Rate Limiting for .NET (англ.). .NET Blog (13 июля 2022). Дата обращения: 26 ноября 2022. Архивировано 27 октября 2022 года.

Ссылки

Шаблон:.NET Core