Microsoft .NET 8, яка з’явилася 14 листопада, містить безліч нових функцій і вдосконалень. InfoWorld наводить кілька прикладів коду, які допоможуть вам почати роботу з новими функціями .NET 8.
Щоб використовувати приклади коду, наведені в цій статті, у вашій системі має бути встановлено Visual Studio 2022. Якщо у вас ще немає копії, то можна завантажити Visual Studio 2022 тут.
Створіть проєкт консольної програми .NET Core у Visual Studio
По-перше, давайте створимо проєкт консольної програми .NET Core у Visual Studio. Якщо у вашій системі встановлено Visual Studio 2022, виконайте наведені нижче дії, щоб створити новий проєкт консольної програми .NET Core.
- Запустіть Visual Studio IDE.
- Натисніть «Створити новий проєкт».
- У вікні «Створити новий проєкт» виберіть «Консольний застосунок (.NET Core)» зі списку відображених шаблонів.
- Натисніть Далі.
- У вікні «Налаштувати новий проєкт» вкажіть ім’я та розташування для нового проєкту.
- Натисніть Далі.
- У вікні «Додаткова інформація», яке показано далі, виберіть «.NET 8.0» як версію фреймворку, яку ви хочете використовувати.
- Натисніть Створити.
Далі ми використаємо цей проєкт консольної програми .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, ігноруватиметься.
Щоб скористатися цією нещодавно доданою функціональністю, ви повинні анотувати свій тип POCO атрибутом System.Text.Json.Serialization.JsonUnmappedMemberHandlingAttribute. Це показано у наведеному нижче фрагменті коду.
[JsonUnmappedMemberHandling(JsonUnmappedMemberHandling.Disallow)]public class Employee{ public int Employee_Id { get; set; }}
Тепер, якщо ви десеріалізуєте екземпляр класу Employee, який визначає ім’я члена, яке не є частиною типу 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
Підтримка власної попередньої компіляції (ahead-of-time, AOT) вперше була представлена у .NET 7. У .NET 8 Microsoft додала власну підтримку AOT для архітектур x64 та Arm64 у macOS і значно зменшила розмір запущених власних програм AOT на Linux.
Покращення генерації коду
З .NET 8 Microsoft також внесла низку вдосконалень у генерацію коду і своєчасну компіляцію (JIT):
- Покращена продуктивність контейнерних програм у хмарних середовищах.
- Покращення SIMD для покращеного розпаралелювання.
- Покращення оптимізації, керованої профілем (PGO).
- Динамічний PGO увімкнено за замовчуванням.
- Покращення продуктивності архітектури Arm64.
- Покращення JIT для швидшої генерації коду.
Підписуйтеся на ProIT у Telegram, щоб не пропустити жодну публікацію!