Информация об изменениях

Сообщение Re[4]: Try the new System.Text.Json source generator от 06.08.2021 8:44

Изменено 06.08.2021 9:14 Serginio1

Re[4]: Try the new System.Text.Json source generator
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, Jack128, Вы писали:


S>>>>https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-source-generator/


VC>>>а со старым system-text-json напомните что не так.


J>>В том, что он использует рефлексию. А MS пытается компиляцию в Native осилить, которая с рефлексией не очень дружит.


VC>причем тут Native? Source Generator он для Managed.

Речь идет про .Net Native. Он тоже Managed со сборкой мусора, но без среды, то есть без возможности докомпилировать.
VC>ну и рефлексия это про Newtonsoft больше.
Ну без готовой реализации сериализации десериализации нужно докомпилировать код.
Re[4]: Try the new System.Text.Json source generator
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, Jack128, Вы писали:


S>>>>https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-source-generator/


VC>>>а со старым system-text-json напомните что не так.


J>>В том, что он использует рефлексию. А MS пытается компиляцию в Native осилить, которая с рефлексией не очень дружит.


VC>причем тут Native? Source Generator он для Managed.

Речь идет про .Net Native. Он тоже Managed со сборкой мусора, но без среды, то есть без возможности докомпилировать.
VC>ну и рефлексия это про Newtonsoft больше.
Ну без готовой реализации сериализации десериализации нужно докомпилировать код.

Ну и в статье правдо по нерусски написано

В предыдущих версиях System.Text.Jsonметаданные сериализации могли быть вычислены только во время выполнения, во время первой процедуры сериализации или десериализации каждого типа в любом графе объектов, переданном сериализатору. После того как эти метаданные сгенерированы, сериализатор выполняет фактическую сериализацию и десериализацию. Результат этого вычисления кэшируется для повторного использования во время последующих процедур обработки JSON. Фаза генерации основана на отражении и является вычислительно дорогостоящей как с точки зрения времени, так и распределения. Эту фазу можно назвать фазой “разминки” сериализатора.

Генератор System.Text.Jsonисходного кода помогает нам устранить эту фазу разогрева, перенося проверку времени выполнения сериализуемых типов с помощью отражения во время компиляции. Результатом этой проверки может быть исходный код, инициализирующий экземпляры метаданных структурированной сериализации. Генератор также может генерировать высокооптимизированную логику сериализации, которая может выполнять набор функций сериализации, заданных заранее. По умолчанию генератор генерирует оба типа источников, но может быть сконфигурирован для генерации только одного из этих типов выходных данных либо по набору типов, либо по каждому сериализуемому типу.

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

Повышенная пропускная способность сериализации
Сокращение времени пуска
Сокращение использования частной памяти
Удалено использование во время выполнения System.Reflectionи System.Reflection.Emit
Trim-совместимая сериализация, которая уменьшает размер приложения