Лучшие новые возможности Microsoft .NET 8

автор vadim


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

Чтобы использовать примеры кода, представленные в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Создание проекта консольного приложения .NET Core в Visual Studio.

Прежде всего давайте создадим проект консольного приложения .NET Core в Visual Studio. Предполагая, что в вашей системе установлена ​​Visual Studio 2022, выполните действия, описанные ниже, чтобы создать новый проект консольного приложения .NET Core.

  1. Запустите интегрированную среду разработки Visual Studio.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «Консольное приложение (.NET Core)» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. Нажмите “Далее.
  7. В следующем окне «Дополнительная информация» выберите «.NET 8.0» в качестве версии платформы, которую вы хотите использовать.
  8. Нажмите Создать.

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

Улучшения сборщика мусора

Сборщик мусора .NET теперь позволяет динамически регулировать ограничения памяти для облачных приложений, особенно для тех, которые работают в Kubernetes. Эта функция будет особенно полезна в сценариях, где службы размещаются в облачной среде.

Чтобы использовать эту функцию, вызовите API RefreshMemoryLimit():

GC.RefreshMemoryLimit();

В следующем фрагменте кода показано, как можно обновить настройки GC, относящиеся к ограничению памяти.

AppContext.SetData("GCHeapHardLimit", (ulong)100 * 1_024 * 1_024);
GC.RefreshMemoryLimit();

Улучшения JSON

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

Кроме того, при десериализации данных в более ранних версиях .NET любое свойство в полезных данных JSON, не являющееся типом POCO, будет игнорироваться. С помощью .NET 8 вы можете сделать все элементы данных доступными в полезной нагрузке JSON.

Чтобы использовать эту новую добавленную функциональность, вы должны аннотировать свой тип POCO атрибутом System.Text.Json.Serialization.JsonUnmappedMemberHandlingAttribute. Это показано в фрагменте кода, приведенном ниже.

[JsonUnmappedMemberHandling(JsonUnmappedMemberHandling.Disallow)]
public class Employee
{
     public int Employee_Id { get; set; }
}

Теперь, если вы десериализуете экземпляр класса «Сотрудник», в котором указано имя члена, не являющееся частью типа POCO, будет выдано исключение JsonException. Например:

JsonSerializer.Deserialize<Employee>
("""{"Employee_Id" : 1, "Department_Id" : 1 }""");

Ниже приведено сообщение об исключении, которое вы увидите при выполнении приведенного выше кода:

// JsonException : The JSON property 'Department_Id' could not be mapped to 
// any .NET member contained in type 'Employee'.

Абстракция времени

Недавно добавленный класс TimeProvider и интерфейс ITimer обеспечивают функциональность абстракции времени, что позволяет вам имитировать время в тестовых сценариях. Функциональность абстракции времени обеспечивает поддержку следующего:

  • Создать новый экземпляр таймера
  • Получить местное время или время UTC
  • Получить временную метку для измерения производительности

Абстрактный класс TimeProvider спроектирован таким образом, чтобы его можно было интегрировать с платформами макетирования, предоставляя методы, которые обеспечивают плавное и всеобъемлющее макетирование всех его аспектов.

Улучшения криптографии

Поскольку киберугрозы распространяются по всему миру, новая поддержка SHA-3 делает приложения .NET 8 более безопасными, предоставляя альтернативу SHA-2. Также в .NET 8 эфемерные операции RSA были перенесены в bcrypt.dll, а не в ncrypt.dll, что позволяет избежать необходимости выполнять удаленный вызов процедуры lsass.exe.

Тип System.Security.Cryptography.RandomNumberGenerator в .NET 8 представляет различные методы использования случайности. Этими методами являются метод GetItems() для случайного выбора элементов из входного набора и метод Shuffle() для уменьшения систематической ошибки обучения в машинном обучении.

Улучшения сжатия

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

Пространство имен System.IO.Compression теперь включает в себя несколько API как часть класса ZipFile, как показано ниже.

namespace System.IO.Compression;
public static partial class ZipFile
{
    public static void CreateFromDirectory(string sourceDirectoryName, Stream destination);
    public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, CompressionLevel compressionLevel, bool includeBaseDirectory);
    public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, CompressionLevel compressionLevel, bool includeBaseDirectory, Encoding? entryNameEncoding);
    public static void ExtractToDirectory(Stream source, string destinationDirectoryName) { }
    public static void ExtractToDirectory(Stream source, string destinationDirectoryName, bool overwriteFiles) { }
    public static void ExtractToDirectory(Stream source, string destinationDirectoryName, Encoding? entryNameEncoding) { }
    public static void ExtractToDirectory(Stream source, string destinationDirectoryName, Encoding? entryNameEncoding, bool overwriteFiles) { }
}

Улучшения встроенной компиляции AOT

Поддержка встроенной предварительной компиляции (AOT) была впервые представлена ​​в .NET 7. В .NET 8 Microsoft добавила встроенную поддержку AOT для архитектур x64 и Arm64 в macOS и значительно уменьшила размер работающих собственных приложений AOT. на Линуксе.

Улучшения генерации кода

В .NET 8 Microsoft также внесла ряд улучшений в генерацию кода и JIT-компиляцию:

  • Повышенная производительность контейнерных приложений в облачных средах.
  • Улучшения SIMD для улучшения распараллеливания
  • Улучшения оптимизации на основе профиля (PGO)
  • Динамический PGO включен по умолчанию
  • Улучшения производительности архитектуры Arm64.
  • Улучшения JIT для более быстрой генерации кода

Другие улучшения производительности

Производительность — это область, которой Microsoft уделяет все больше внимания в последних выпусках .NET. Вот некоторые другие ключевые улучшения производительности в .NET 8.

Улучшения в List.AddRange(IEnumerable)

AddRange(IEnumerable) был реорганизован и улучшен для повышения производительности, когда последовательность не является ICollection.

Улучшения в Int32.ToString()

Метод Int32.ToString() был улучшен для повышения производительности за счет кэширования строковых значений в памяти.

Введение пространства имен System.Collections.Frozen

System.Collections.Frozen представляет два новых класса коллекций: FrozenSet и FrozenDictionary. Слово Frozen здесь подразумевает, что коллекции неизменяемы, т. е. вы не можете изменить их после создания экземпляра этих классов. Эти новые классы коллекций позволяют выполнять более быстрые поиски и перечисления с помощью таких методов, как TryGetValue() и contains().

Следующий фрагмент кода показывает, как можно использовать FrozenSet.

using System.Collections.Frozen;
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
FrozenSet<int> frozenSet = numbers.ToFrozenSet();
foreach (int i in frozenSet)
    Console.WriteLine(i);
Console.ReadLine();

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

дальнейшее чтение

Вот несколько онлайн-ресурсов, на которых вы можете получить дополнительную информацию о .NET 8:

  • Microsoft Learn: на веб-сайте Microsoft Learn есть веб-страница, на которой описаны все новые и улучшенные функции .NET 8.
  • Документация GitHub. Вы также можете найти информацию о новых функциях .NET 8 в репозитории GitHub для документации .NET и .NET Core.
  • Веб-сайт .NET: на официальном веб-сайте Microsoft .NET есть веб-страница, на которой можно найти более подробную информацию о .NET 8.
  • Блоги .NET и форумы сообщества .NET. Возможно, вам захочется изучить блоги и форумы сообщества, где разработчики делятся своим опытом и знаниями относительно функций и обновлений .NET. Эти платформы отлично подходят для обсуждения того, что нового в конкретной версии .NET.

Выпуск .NET 8 от Microsoft — это большой шаг вперед в создании масштабируемых, безопасных, надежных и производительных приложений. С выпуском .NET 8 стал доступен и C# 12. Скоро я напишу здесь пост о новых возможностях C# 12.

Дальше читайте это:

  • Лучшее программное обеспечение с открытым исходным кодом 2023 года
  • Сертификаты программирования все еще имеют значение?
  • Облачные вычисления больше не являются пустяком
  • Что такое генеративный ИИ? Искусственный интеллект, который создает
  • Программирование с помощью ИИ: советы и лучшие практики от разработчиков
  • Почему Wasm — это будущее облачных вычислений

Related Posts

Оставить комментарий