AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TJSONToObject Performance

Ein Thema von fisipjm · begonnen am 12. Feb 2024 · letzter Beitrag vom 15. Feb 2024
Antwort Antwort
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
782 Beiträge
 
#1

AW: TJSONToObject Performance

  Alt 12. Feb 2024, 20:28
Wie sieht denn deine Klasse aus?

Und irgendwie müsstest du die Länge / Kapazität des Arrays vorher passend setzen, damit es nicht ständig vergrößert werden muss.
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#2

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 07:22
Moin Olli,

die Klasse sieht so aus:

Delphi-Quellcode:
type
TArrayClass<T: Class> = class
    private
        fObjects: TArray<T>;
    public
        property Objects: TArray<T> read fObjects write fObjects;
    end;


 TBaseClass = class
    private
        fValue1: string;
        fValue2: string;
        fValue3: string;
        fValue4: string;
        fValue5: string;
    public
        property Value1: string read fValue1 write fValue1;
        property Value2: string read fValue2 write fValue2;
        property Value3: string read fValue3 write fValue3;
        property Value4: string read fValue4 write fValue4;
        property Value5: string read fValue5 write fValue5;
    end;

TExtenderClass = class(TBaseClass)
    private
        fValue6: string;
        fValue7: string;
        fValue8: string;
        fValue9: string;
    public
        property Value6: string read fValue6 write fValue6;
        property Value7: string read fValue7 write fValue7;
        property Value8: string read fValue8 write fValue8;
        property Value9: string read fValue9 write fValue9;
    end;

TCompleteList = class(TArrayClass<TExtenderClass>);

....
var
  lList: TCompleteList;
...

  lList:= TJson.JsonToObject<TCompleteList>(MyJSONString);
...
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#3

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 07:36
Und irgendwie müsstest du die Länge / Kapazität des Arrays vorher passend setzen, damit es nicht ständig vergrößert werden muss.
Hab ich versucht, ändert aber nichts. Im Gegenteil, der Prozess die Gesamtlänge herauszufinden und das Array entsprechend zu setzen bringt mir eine weitere Sekunde Wartezeit ein.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
782 Beiträge
 
#4

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 10:02
Ich kenn das nur so:

Delphi-Quellcode:
TCompleteList = class
    FObjects: TArray<TExtenderClass>;
  end;
Macht DAS einen Unterschied?
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#5

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 10:46
Ich kenn das nur so:

Delphi-Quellcode:
TCompleteList = class
    FObjects: TArray<TExtenderClass>;
  end;
Macht DAS einen Unterschied?
Nein, kein Unterschied.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.652 Beiträge
 
Delphi 12 Athens
 
#6

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 10:49
Bei Performanceproblemen gibt es viele mögliche Ursachen. Könntest du einen konkreten Testfall mit dem entsprechenden JSON erstellen mit dem wir das nachstellen können?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
334 Beiträge
 
Delphi 12 Athens
 
#7

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 13:58
Bei Performanceproblemen gibt es viele mögliche Ursachen. Könntest du einen konkreten Testfall mit dem entsprechenden JSON erstellen mit dem wir das nachstellen können?
Kurz was zusammengewürfelt.
Hier wird der Unterschied sogar noch viel deutlicher.
Angehängte Dateien
Dateityp: zip PerformanceJSON.zip (9,8 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.652 Beiträge
 
Delphi 12 Athens
 
#8

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 15:21
Es ist wohl richtig, dass eine direkte Verarbeitung des JSONObject schneller ist als das RTTI-basierte JsonToObject. Selbst bei der Umwandlung der einzelnen Values weißt du ja schon, dass es sich um Strings handelt und kannst das durch den gezielten Aufruf von TryGetValue<string> ausnutzen, während andernfalls immer der Umweg über TValue erfolgen muss.

Also, ja, direkt das JSON abzuarbeiten ist deutlich performanter - aber eben auch aufwändiger und schlechter wartbar. Du musst halt abwägen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
482 Beiträge
 
#9

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 16:27
Kurz was zusammengewürfelt.
Hier wird der Unterschied sogar noch viel deutlicher.
Die Werte für mORMot für den Test im Anhang liegen zwischen 150 und 300 Millisekunden. Du kannst auch deine Testdatei speichern und in den JsonViewer aus diesem Artikel laden. Die Ladezeit wird links unten eingeblendet.

Bis bald...
Thomas
Angehängte Dateien
Dateityp: zip mORMot_PerformanceJSON.zip (2,0 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz