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 (STJ) в своем проекте Unity из -за его сообщенных преимуществ: более легкий след и лучшая производительность с помощью генерации источника, что должно дополнять компиляцию AOT IL2CPP. Тем не менее, я испытываю неожиданные проблемы с производительностью. Профилирование показывает, что класс Jsoneserializer тратит чрезмерное время, звоня Gettypeinfo для каждой собственности в моей схеме, созданной источником. Хотя фактическая десериализация быстрая (несколько миллисекунд) и использует одну треть распределения кучи по сравнению с Newtonsoft, общая производительность ухудшается: ~ 300 мс с STJ против ~ 200 мс с Newtonsoft.json.
мое понимание: источник должен исключить отражение в сценарии. Тот факт, что GetTypeInfo все еще называется сильно, что что-то не работает, как и ожидалось, как и ожидалось, с настройкой моей генерации источника. Это ожидаемое поведение, или это указывает на то, что мое поколение источника не настроена правильно? Какие шаги я должен предпринять для достижения обещанных пособий по производительности? Имейте в виду, что я должным образом инициализации класса источника и не переопределяю Jsonserializeroptions config

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

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 Ответы
    3 Просмотры
    Последнее сообщение 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#»