Найти в Дзене

10 главных изменений .NET 7 Preview 5

Вышел .NET 7 Preview 5! Время посмотреть на нововведения этой версии. Полиморфизм в System.Text.Json Одним из больших недостатков STJ в сравнении с Newtonsoft.Json.Net было отсутствие возможности использовать полиморфизм в моделях. Теперь можно делать так: Чтобы использовать полиморфизм при десериализации, нужно определить дискриминатор типа, который будет использоваться в JSON-предтавлении: В качестве дискриминаторов можно использовать и целочисленные значения: Копирование байтового представления в UTF-8 и UTF-16 из Utf8JsonReader без создания новой строки Раньше Utf8JsonReader.GetString() был единственным способом, которым пользователи могли получить JSON-представление строки из Utf8JsonReader. Этот метод всегда создавал новую строку, что может быть нежелательно в критичных к производительности сценариях. Теперь появилась возможность скопировать UTF-8 или UTF-16 представление json в существующие byte[] и cahr[]: В source generator для STJ добавлена поддержка IAsyncEnumerable<T>, Json
Оглавление

Вышел .NET 7 Preview 5! Время посмотреть на нововведения этой версии.

Полиморфизм в System.Text.Json

Одним из больших недостатков STJ в сравнении с Newtonsoft.Json.Net было отсутствие возможности использовать полиморфизм в моделях. Теперь можно делать так:

Чтобы использовать полиморфизм при десериализации, нужно определить дискриминатор типа, который будет использоваться в JSON-предтавлении:

-2

В качестве дискриминаторов можно использовать и целочисленные значения:

-3

Копирование байтового представления в UTF-8 и UTF-16 из Utf8JsonReader без создания новой строки

Раньше Utf8JsonReader.GetString() был единственным способом, которым пользователи могли получить JSON-представление строки из Utf8JsonReader. Этот метод всегда создавал новую строку, что может быть нежелательно в критичных к производительности сценариях. Теперь появилась возможность скопировать UTF-8 или UTF-16 представление json в существующие byte[] и cahr[]:

-4

В source generator для STJ добавлена поддержка IAsyncEnumerable<T>, JsonDocument, DateOnly и TimeOnly

-5

В System.IO.Stream добавлены методы ReadExactly, ReadExactlyAsync, ReadAtLeast и ReadAtLeastAsync

ReadExactly будет считывать ровно столько байт, сколько было передано (или какой длины буфер был передан), если поток закончится раньше, то будет выбрашено исключение EndOfStreamException.

-6

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

-7

Вызов методов через рефлексию ускорился в 3-4 раза

-8

Рослин-анализатор и код-фиксер для регулярных выражений, которые могут использовать RegexGenerator

В .NET 7 появился новый сорс-генератор для регулярных выражений, который позволяет увеличить производительность regex за счет генерации кода. В .NET 7 preview 5 добавился анализатор, который позволяет найти в коде те регулярки, которые могут быть заменены использованием такого генератора.

-9
-10

Много улучшений для Generic Math

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

Изменений очень много — добавились новые интерфейсы для типов, которые поддерживают сложение, умножение, знак, стандарт IEEE 754, минимальные и максимальные значения, значения с плавающей точкой. Большинство типов для работы с числами получили поддержку новых интерфейсов. Так же появились интерфейсы для операций с экспонентой, логарифмических операций, возведения в степень, извлечения корня. Сюда же можно включить появление поддержки побитового сдвига вправо без знака.

Для разработчиков это значит возможность использовать новые интерфейсы вместо конкертных типов и универсально работать с такими типами без необходимости менять код.

Множество оптимизаций производительности для разных сценариев и платформ и улучшения в JIT

Это касается и работы на конкретных платформах, и увеличения производительности частных сценариев, например, оптимизации for-циклов с инкрементом >1

-11

Превью Text Classification API в ML.NET

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

Новое API в ML.NET позволяет решать эту задачу с помощью глубокого обучения на основе TorchSharp.

-12

Методы перечисления тегов System.Diagnostics.ActivityEvent и System.Diagnostics.ActivityLink без дополнительных аллокаций с быстрым доступом к элементам

-13