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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • System.text.json Generation Generation Calling Gettypeinfo чрезмерно, медленнее, чем Newtonsoft.json в Unity 6
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • System.text.json Generation Generation Calling Gettypeinfo чрезмерно, медленнее, чем Newtonsoft.json в Unity 6
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как сделать System.text.json Generation Generation Dynamic
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • System.Text.Json.JsonException в System.Text.Json.dll Ошибка десериализации ../Data\clients.json: значение JSON не удало
    Anonymous » » в форуме C#
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • System.Text.Json.JsonException в System.Text.Json.dll Ошибка десериализации ../Data\clients.json: не удалось преобразова
    Anonymous » » в форуме C#
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous

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