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 Uwe Raabe
Uwe Raabe

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

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
333 Beiträge
 
Delphi 12 Athens
 
#2

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.629 Beiträge
 
Delphi 12 Athens
 
#3

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
fisipjm

Registriert seit: 28. Okt 2013
333 Beiträge
 
Delphi 12 Athens
 
#4

AW: TJSONToObject Performance

  Alt 13. Feb 2024, 16:05
Also, ja, direkt das JSON abzuarbeiten ist deutlich performanter - aber eben auch aufwändiger und schlechter wartbar. Du musst halt abwägen.
Das hab ich befürchtet Danke aber trotzdem für die Rückmeldung
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
479 Beiträge
 
#5

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
fisipjm

Registriert seit: 28. Okt 2013
333 Beiträge
 
Delphi 12 Athens
 
#6

AW: TJSONToObject Performance

  Alt 14. Feb 2024, 08:59
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
Das Sieht sehr vielversprechend aus
Gibt es einen Grund warum du den "Umweg" über ein File nimmst und nicht direkt mit einem String arbeitest?
Ich habe es mal eben versucht mit einem normalen String umzusetzen, aber bekomme es nicht hin, kenne das Framework dafür zu wenig

Edit: Ne passt, hab mich bissel eingelesen und gesehen, dass die Felder, die in der Klasse verwendet werden sollen in Published liegen müssen. Macht RTTI seitig natürlich Sinn. Danke für das Beispiel ��

Geändert von fisipjm (14. Feb 2024 um 09:31 Uhr)
  Mit Zitat antworten Zitat
fisipjm

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

AW: TJSONToObject Performance

  Alt 14. Feb 2024, 10:15
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...
Das Sieht sehr vielversprechend aus
Ich hab gerade gesehen das mORMot2 nicht unter Android läuft ich brauch das ganze leider für mobile Development also iOS und Android
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
479 Beiträge
 
#8

AW: TJSONToObject Performance

  Alt 14. Feb 2024, 13:16
Ich hab gerade gesehen das mORMot2 nicht unter Android läuft ich brauch das ganze leider für mobile Development also iOS und Android
Gibt es für mORMot1. Die Namen der Funktionen könnten sich geändert haben. Das Fork Repository findest du auf GitHub. Habe es selbst nicht getestet. Und jetzt blamiere ich mich, sollte der Autor hier zufällig mitlesen, sein Name ist Thomas K...? Die restlichen Buchstaben sind in den unendlichen Weiten verschwunden.

Bis bald...
Thomas

Geändert von mytbo (14. Feb 2024 um 13:22 Uhr)
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
333 Beiträge
 
Delphi 12 Athens
 
#9

AW: TJSONToObject Performance

  Alt 14. Feb 2024, 15:03
Ich hab gerade gesehen das mORMot2 nicht unter Android läuft ich brauch das ganze leider für mobile Development also iOS und Android
Gibt es für mORMot1. Die Namen der Funktionen könnten sich geändert haben. Das Fork Repository findest du auf GitHub. Habe es selbst nicht getestet. Und jetzt blamiere ich mich, sollte der Autor hier zufällig mitlesen, sein Name ist Thomas K...? Die restlichen Buchstaben sind in den unendlichen Weiten verschwunden.

Bis bald...
Thomas
Hi Thomas,

vielen Dank für deine Antwort mOrMot1 wird nicht mehr weiter entwickelt, wenn ich das richtig verstanden habe. Ich hab ein wenig Bauchschmerzen ein so großes Framework in das Projekt zu integrieren, wenn bereits jetzt klar ist, das es nur noch maximal Fixes geben wird.
Ich habe aber gesehen, dass es im Projekt eine einzige Unit gibt, die für sich genommen lauffähig ist.
SyncCrossPlatformJSON.pas - Hab diese Mal in das Projekt integriert, aber es sieht so aus, als würde dort das JSONToObject nicht mit dem Array arbeiten können. Zumindest ist meine Klasse immer leer (Ohne Fehler). Hast du damit zufällig Erfahrung?

LG
PJM
  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 14:28 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