System.Text.json Source -Generierung nennt Gettypeinfo übermäßig, langsamer als newtonsoft.json in Unity 6C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 System.Text.json Source -Generierung nennt Gettypeinfo übermäßig, langsamer als newtonsoft.json in Unity 6

Post by Anonymous »

Ich migriere von newtonsoft.json zu System.text.json (STJ) in meinem Unity -Projekt aufgrund seiner gemeldeten Vorteile: leichterer Speicherpflichtiger und bessere Leistung durch Quellgenerierung, die die AOT -Zusammenstellung von IL2CPP ergänzen sollte. Ich habe jedoch unerwartete Leistungsprobleme. Die Profilierung zeigt, dass die JsonSerializer-Klasse für jede Eigenschaft in meinem Quellenschema übermäßig Zeit damit verbringt, Gettypeinfo zu bezeichnen. Während die tatsächliche Deserialisierung schnell ist (nur wenige Millisekunden) und ein Drittel der Haufen im Vergleich zu Newtonsoft verwendet, ist die Gesamtleistung schlechter: ~ 300 ms mit stj vs ~ 200 ms mit newtonsoft.json. Die Tatsache, dass Gettypeinfo immer noch als stark bezeichnet wird, schlägt, dass etwas nicht wie erwartet mit meinem Quellgenerierungs-Setup funktioniert. Ist dieses erwartete Verhalten oder zeigt es an, dass meine Quellgenerierung nicht richtig konfiguriert ist? Welche Schritte sollten ich unternehmen, um die versprochenen Leistungsvorteile zu erzielen? Denken Sie daran, dass ich die Quell-Generalklasse ordnungsgemäß initialisiere und die jsonserializeroptions konfiguriert
nicht neu definiere.

Code: Select all

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);
});
}
}
Angehängt ist ein Bild meiner Profilerstellung. Sie können die schwere Anrufe von Gettypeinfo bemerken. Die Liste geht weiter und auf

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post