Page 1 of 1

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

Posted: 18 Aug 2025, 06:58
by Anonymous
Ich migriere von newtonsoft.json zu System.Text.json In meinem Einheitsprojekt aufgrund seiner gemeldeten Vorteile: leichterer Speicher -Fußabdruck und eine bessere Leistung durch Quellgenerierung, die IL2CPPs AOT -Kompilierung ergänzen sollte. Der Quell-erzeugte JsonSerializer Die Klasse dauert ~ 300 ms, um das Laden zu vervollständigen. Die Profilierung zeigt, dass die Klasse JsonSerializer für jede Eigenschaft in meinem Quellenschema übermäßig Zeit damit verbringt, Gettypeinfo aufzurufen. Während die tatsächliche Deserialisierung schnell ist (nur wenige Millisekunden) und ein Drittel im Vergleich zu Newtonsoft verwendet, ist die Gesamtleistung schlechter: ~ 300 ms mit System. Kompilieren Sie die Zeit, insbesondere von Aot -Szenarien. Die Tatsache, dass Gettypeinfo immer noch als stark genannt 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?
Beachten

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 Screenshot meiner Profilierung. Die Liste geht weiter und auf