System.text.json Generation Generation Calling Gettypeinfo чрезмерно, медленнее, чем Newtonsoft.json в Unity 6C#

Место общения программистов C#
Ответить
Anonymous
 System.text.json Generation Generation Calling Gettypeinfo чрезмерно, медленнее, чем Newtonsoft.json в Unity 6

Сообщение Anonymous »

Я перехожу из newtonsoft.json на system.text.json в моем проекте Unity из -за его сообщенных преимуществ: более легкая следов памяти и лучшая производительность с помощью источника, что должно дополнять IL2CPP, компиляцию AOT.
Однако у меня непреднамеренные проблемы. Сгенерированный источником Jsonserializer класс занимает ~ 300 мс для завершения загрузки. Профилирование показывает, что класс jsonserializer тратит чрезмерное время, вызывая getTypeInfo для каждого свойства в моей схеме, созданной источником. В то время как фактическая десериализация быстрая (несколько миллисекундов) и использует одну треть распределения кучи по сравнению с Newtonsoft, общая производительность хуже: ~ 300 мс с System.Text.Json против ~ 200 мс с Newtonsoft.Json .
my spective. Время, особенно принесло пользу сценариям AOT. Тот факт, что GetTypeInfo все еще называется сильно, что что-то не работает, как и ожидалось, с настройкой моей генерации источников. Это ожидаемое поведение, или это указывает на то, что мое поколение источника не настроена правильно? Какие шаги я должен предпринять для достижения обещанных преимуществ работы?

Код: Выделить всё

using System.Text.Json.Serialization;

[JsonSourceGenerationOptions(IncludeFields = true, NumberHandling = JsonNumberHandling.AllowReadingFromString)]
[JsonSerializable(typeof(MainConcreteClass))]
[JsonSerializable(typeof(ConcreteClass2))]
[JsonSerializable(typeof(ConcreteClass3))]
internal partial class AppJsonContext : JsonSerializerContext { }

public class DataFetcher
{
public void Fetch()
{
HTTPRequest request = new HTTPRequest(
new Uri("https://localhost:5000/my_api"),
HeaderMethod("POST"), (req, res) => {
// Takes about 300ms
System.Text.Json.JsonSerializer.Deserialize(
response.Data, AppJsonContext.Default.MainConcreteClass);
});
}
}
Прикреплен - это скриншот моего профилирования, вы можете заметить тяжелое призыв Gettypeinfo . Список можно продолжать и на


Подробнее здесь: https://stackoverflow.com/questions/797 ... lower-than
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»