AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi REST.Json extrem langsam?
Thema durchsuchen
Ansicht
Themen-Optionen

REST.Json extrem langsam?

Ein Thema von seb83 · begonnen am 10. Jan 2024 · letzter Beitrag vom 10. Jan 2024
Antwort Antwort
seb83

Registriert seit: 25. Jun 2015
9 Beiträge
 
#1

REST.Json extrem langsam?

  Alt 10. Jan 2024, 14:58
Hi,

deserialisiere ein Objekt mit einer Liste mit 500 Objekten, dies dauert 5-7 Sekunden, ist das normal? Gibt es schnellere JSON Serialisierer?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: REST.Json extrem langsam?

  Alt 10. Jan 2024, 15:44
Gibt es schnellere JSON Serialisierer?
Ja
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#3

AW: REST.Json extrem langsam?

  Alt 10. Jan 2024, 16:02
Wenn es auf Geschwindigkeit ankommt, nimm mORMot. Benchmark-Werte siehe Artikel hier im Forum.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
seb83

Registriert seit: 25. Jun 2015
9 Beiträge
 
#4

AW: REST.Json extrem langsam?

  Alt 10. Jan 2024, 17:28
Wenn es auf Geschwindigkeit ankommt, nimm mORMot. Benchmark-Werte siehe Artikel hier im Forum.

Bis bald...
Thomas
Mal umgebaut und auch extrem langsam >5s irgendwo muss da ein Problem drin stecken, obwohl das Objekt und alles vollkommen einfach sind.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: REST.Json extrem langsam?

  Alt 10. Jan 2024, 17:30
Dann solltest du mal etwas Code zeigen - idealerweise ein kleines Programm, mit dem man es reproduzieren kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
seb83

Registriert seit: 25. Jun 2015
9 Beiträge
 
#6

AW: REST.Json extrem langsam?

  Alt 10. Jan 2024, 17:32
Programm ist schwierig und JSON auch, da ich das nicht öffentlich machen kann.
Das Objekt.
Code:
type
  TecRmiData = class
  private
    FTypeId: string;
    FTcdTypeId: string;
    FHerstSchluessel: string;
    FTypSchluessel: string;
    FVvs_Schluessel: string;
    FTypVvsPruefziffer: string;
    FFahrzeugklasse: string;
    FCodeAufbau: string;
    FFabrikMarke: string;
    FAmtlKlartextTyp: string;
    FVariante: string;
    FVersion: string;
    FHandelsName: string;
    FHerstText: string;
    FAmtlKlartextaufbau: string;
    FTxtKraftstoffKurz: string;
    FCodeKraftstoff: string;
    FHubraum: string;
    FAnzAchsen: string;
    FAbgasrichtlTg: string;
    FNationaleEmiklasse: string;
    FAntriebsachs: string;
    FNennleistungKw4: string;
    FNennleistungElektro30Min: string;
    FHoechstgeschwindigkeit: string;
    FAnzahlSitze: string;
    FMasseFahrbereitMin: string;
    FMasseFahrbereitMax: string;
    FTechZulGesamtMasse: string;
    FZulMaxAchsLast1: string;
    FZulMaxAchsLast2: string;
    FCo2Kombi: string;
    FStandgeraeusch3: string;
    FDrehStandgeraeusch: string;
    FFahrgeraeusch3: string;
    FTechnZulAnhaengerLastGebrem: string;
    FTechnZulAnhaengerLastUngebrem: string;
    FLeistungsGew: string;
    FLaengeMin: string;
    FLaengeMax: string;
    FBreiteMin: string;
    FBreiteMax: string;
    FHoeheMin: string;
    FHoeheMax: string;
    FStuetzLast: string;
    FBereifAchse1: string;
    FBereifAchse2: string;
    FGenehmigungsNr01: string;
    FGenehmigungsDat01: string;
    FBemerkungenAusnahmen: string;
    FAnmerkungen: string;
    FTxAnbringFzidnr: string;
    FBaumuster: string;
    FTxGetrTyp: string;
    FFelgeAchse1: string;
    FFelgeAchse2: string;
  published
    property TypeId: string read FTypeId write FTypeId;
    property TcdTypeId: string read FTcdTypeId write FTcdTypeId;
    property HerstSchluessel: string read FHerstSchluessel
      write FHerstSchluessel;
    property TypSchluessel: string read FTypSchluessel write FTypSchluessel;
    property Vvs_Schluessel: string read FVvs_Schluessel write FVvs_Schluessel;
    property TypVvsPruefziffer: string read FTypVvsPruefziffer
      write FTypVvsPruefziffer;
    property Fahrzeugklasse: string read FFahrzeugklasse write FFahrzeugklasse;
    property CodeAufbau: string read FCodeAufbau write FCodeAufbau;
    property FabrikMarke: string read FFabrikMarke write FFabrikMarke;
    property AmtlKlartextTyp: string read FAmtlKlartextTyp
      write FAmtlKlartextTyp;
    property Variante: string read FVariante write FVariante;
    property Version: string read FVersion write FVersion;
    property HandelsName: string read FHandelsName write FHandelsName;
    property HerstText: string read FHerstText write FHerstText;
    property AmtlKlartextaufbau: string read FAmtlKlartextaufbau
      write FAmtlKlartextaufbau;
    property TxtKraftstoffKurz: string read FTxtKraftstoffKurz
      write FTxtKraftstoffKurz;
    property CodeKraftstoff: string read FCodeKraftstoff write FCodeKraftstoff;
    property Hubraum: string read FHubraum write FHubraum;
    property AnzAchsen: string read FAnzAchsen write FAnzAchsen;
    property AbgasrichtlTg: string read FAbgasrichtlTg write FAbgasrichtlTg;
    property NationaleEmiklasse: string read FNationaleEmiklasse
      write FNationaleEmiklasse;
    property Antriebsachs: string read FAntriebsachs write FAntriebsachs;
    property NennleistungKw4: string read FNennleistungKw4
      write FNennleistungKw4;
    property NennleistungElektro30Min: string read FNennleistungElektro30Min
      write FNennleistungElektro30Min;
    property Hoechstgeschwindigkeit: string read FHoechstgeschwindigkeit
      write FHoechstgeschwindigkeit;
    property AnzahlSitze: string read FAnzahlSitze write FAnzahlSitze;
    property MasseFahrbereitMin: string read FMasseFahrbereitMin
      write FMasseFahrbereitMin;
    property MasseFahrbereitMax: string read FMasseFahrbereitMax
      write FMasseFahrbereitMax;
    property TechZulGesamtMasse: string read FTechZulGesamtMasse
      write FTechZulGesamtMasse;
    property ZulMaxAchsLast1: string read FZulMaxAchsLast1
      write FZulMaxAchsLast1;
    property ZulMaxAchsLast2: string read FZulMaxAchsLast2
      write FZulMaxAchsLast2;
    property Co2Kombi: string read FCo2Kombi write FCo2Kombi;
    property Standgeraeusch3: string read FStandgeraeusch3
      write FStandgeraeusch3;
    property DrehStandgeraeusch: string read FDrehStandgeraeusch
      write FDrehStandgeraeusch;
    property Fahrgeraeusch3: string read FFahrgeraeusch3 write FFahrgeraeusch3;
    property TechnZulAnhaengerLastGebrem: string
      read FTechnZulAnhaengerLastGebrem write FTechnZulAnhaengerLastGebrem;
    property TechnZulAnhaengerLastUngebrem: string
      read FTechnZulAnhaengerLastUngebrem write FTechnZulAnhaengerLastUngebrem;
    property LeistungsGew: string read FLeistungsGew write FLeistungsGew;
    property LaengeMin: string read FLaengeMin write FLaengeMin;
    property LaengeMax: string read FLaengeMax write FLaengeMax;
    property BreiteMin: string read FBreiteMin write FBreiteMin;
    property BreiteMax: string read FBreiteMax write FBreiteMax;
    property HoeheMin: string read FHoeheMin write FHoeheMin;
    property HoeheMax: string read FHoeheMax write FHoeheMax;
    property StuetzLast: string read FStuetzLast write FStuetzLast;
    property BereifAchse1: string read FBereifAchse1 write FBereifAchse1;
    property BereifAchse2: string read FBereifAchse2 write FBereifAchse2;
    property GenehmigungsNr01: string read FGenehmigungsNr01
      write FGenehmigungsNr01;
    property GenehmigungsDat01: string read FGenehmigungsDat01
      write FGenehmigungsDat01;
    property BemerkungenAusnahmen: string read FBemerkungenAusnahmen
      write FBemerkungenAusnahmen;
    property Anmerkungen: string read FAnmerkungen write FAnmerkungen;
    property TxAnbringFzidnr: string read FTxAnbringFzidnr
      write FTxAnbringFzidnr;
    property Baumuster: string read FBaumuster write FBaumuster;
    property TxGetrTyp: string read FTxGetrTyp write FTxGetrTyp;
    property FelgeAchse1: string read FFelgeAchse1 write FFelgeAchse1;
    property FelgeAchse2: string read FFelgeAchse2 write FFelgeAchse2;
  end;

type
  TKbaDataResult = class(TObject)
  private
    FSearchKey: string;
    FTooMuchResults: Boolean;
    FNumberOfResults: Integer;
    FNumberOfPossibleResults: Integer;
    FFoundData: TArray<TecRmiData>;
  public
    constructor Create;
    destructor Destroy; override;
  published
    property SearchKey: string read FSearchKey write FSearchKey;
    property TooMuchResults: Boolean read FTooMuchResults write FTooMuchResults;
    property NumberOfResults: Integer read FNumberOfResults
      write FNumberOfResults;
    property NumberOfPossibleResults: Integer read FNumberOfPossibleResults
      write FNumberOfPossibleResults;
    property FoundData: TArray<TecRmiData> read FFoundData;
  end;
Und das deserialisieren
Code:
t := TKbaDataResult.Create;
valid := ObjectLoadJson(t, StringToUtf8(restRequest.Response.JSONText), TKbaDataResult);
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#7

AW: REST.Json extrem langsam?

  Alt 10. Jan 2024, 18:54
Mal umgebaut und auch extrem langsam >5s irgendwo muss da ein Problem drin stecken, obwohl das Objekt und alles vollkommen einfach sind.
Mit 500 Sub-Objekten wie vermutet ca. 5 Millisekunden. Der ganze Test-Case hier:
Delphi-Quellcode:
unit frm_Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  mormot.core.base,
  mormot.core.data,
  mormot.core.json,
  mormot.core.rtti,
  mormot.core.test,
  mormot.core.perf,
  mormot.core.os;

type
  {$M+}
  TecRmiData = class
  private
    FTypeId: string;
    FTcdTypeId: string;
    FHerstSchluessel: string;
    FTypSchluessel: string;
    FVvs_Schluessel: string;
    FTypVvsPruefziffer: string;
    FFahrzeugklasse: string;
    FCodeAufbau: string;
    FFabrikMarke: string;
    FAmtlKlartextTyp: string;
    FVariante: string;
    FVersion: string;
    FHandelsName: string;
    FHerstText: string;
    FAmtlKlartextaufbau: string;
    FTxtKraftstoffKurz: string;
    FCodeKraftstoff: string;
    FHubraum: string;
    FAnzAchsen: string;
    FAbgasrichtlTg: string;
    FNationaleEmiklasse: string;
    FAntriebsachs: string;
    FNennleistungKw4: string;
    FNennleistungElektro30Min: string;
    FHoechstgeschwindigkeit: string;
    FAnzahlSitze: string;
    FMasseFahrbereitMin: string;
    FMasseFahrbereitMax: string;
    FTechZulGesamtMasse: string;
    FZulMaxAchsLast1: string;
    FZulMaxAchsLast2: string;
    FCo2Kombi: string;
    FStandgeraeusch3: string;
    FDrehStandgeraeusch: string;
    FFahrgeraeusch3: string;
    FTechnZulAnhaengerLastGebrem: string;
    FTechnZulAnhaengerLastUngebrem: string;
    FLeistungsGew: string;
    FLaengeMin: string;
    FLaengeMax: string;
    FBreiteMin: string;
    FBreiteMax: string;
    FHoeheMin: string;
    FHoeheMax: string;
    FStuetzLast: string;
    FBereifAchse1: string;
    FBereifAchse2: string;
    FGenehmigungsNr01: string;
    FGenehmigungsDat01: string;
    FBemerkungenAusnahmen: string;
    FAnmerkungen: string;
    FTxAnbringFzidnr: string;
    FBaumuster: string;
    FTxGetrTyp: string;
    FFelgeAchse1: string;
    FFelgeAchse2: string;
  published
    property TypeId: string
      read FTypeId write FTypeId;
    property TcdTypeId: string
      read FTcdTypeId write FTcdTypeId;
    property HerstSchluessel: string
      read FHerstSchluessel write FHerstSchluessel;
    property TypSchluessel: string
      read FTypSchluessel write FTypSchluessel;
    property Vvs_Schluessel: string
      read FVvs_Schluessel write FVvs_Schluessel;
    property TypVvsPruefziffer: string
      read FTypVvsPruefziffer write FTypVvsPruefziffer;
    property Fahrzeugklasse: string
      read FFahrzeugklasse write FFahrzeugklasse;
    property CodeAufbau: string
      read FCodeAufbau write FCodeAufbau;
    property FabrikMarke: string
      read FFabrikMarke write FFabrikMarke;
    property AmtlKlartextTyp: string
      read FAmtlKlartextTyp write FAmtlKlartextTyp;
    property Variante: string
      read FVariante write FVariante;
    property Version: string
      read FVersion write FVersion;
    property HandelsName: string
      read FHandelsName write FHandelsName;
    property HerstText: string
      read FHerstText write FHerstText;
    property AmtlKlartextaufbau: string
      read FAmtlKlartextaufbau write FAmtlKlartextaufbau;
    property TxtKraftstoffKurz: string
      read FTxtKraftstoffKurz write FTxtKraftstoffKurz;
    property CodeKraftstoff: string
      read FCodeKraftstoff write FCodeKraftstoff;
    property Hubraum: string
      read FHubraum write FHubraum;
    property AnzAchsen: string
      read FAnzAchsen write FAnzAchsen;
    property AbgasrichtlTg: string
      read FAbgasrichtlTg write FAbgasrichtlTg;
    property NationaleEmiklasse: string
      read FNationaleEmiklasse write FNationaleEmiklasse;
    property Antriebsachs: string
      read FAntriebsachs write FAntriebsachs;
    property NennleistungKw4: string
      read FNennleistungKw4 write FNennleistungKw4;
    property NennleistungElektro30Min: string
      read FNennleistungElektro30Min write FNennleistungElektro30Min;
    property Hoechstgeschwindigkeit: string
      read FHoechstgeschwindigkeit write FHoechstgeschwindigkeit;
    property AnzahlSitze: string
      read FAnzahlSitze write FAnzahlSitze;
    property MasseFahrbereitMin: string
      read FMasseFahrbereitMin write FMasseFahrbereitMin;
    property MasseFahrbereitMax: string
      read FMasseFahrbereitMax write FMasseFahrbereitMax;
    property TechZulGesamtMasse: string
      read FTechZulGesamtMasse write FTechZulGesamtMasse;
    property ZulMaxAchsLast1: string
      read FZulMaxAchsLast1 write FZulMaxAchsLast1;
    property ZulMaxAchsLast2: string
      read FZulMaxAchsLast2 write FZulMaxAchsLast2;
    property Co2Kombi: string
      read FCo2Kombi write FCo2Kombi;
    property Standgeraeusch3: string
      read FStandgeraeusch3 write FStandgeraeusch3;
    property DrehStandgeraeusch: string
      read FDrehStandgeraeusch write FDrehStandgeraeusch;
    property Fahrgeraeusch3: string
      read FFahrgeraeusch3 write FFahrgeraeusch3;
    property TechnZulAnhaengerLastGebrem: string
      read FTechnZulAnhaengerLastGebrem write FTechnZulAnhaengerLastGebrem;
    property TechnZulAnhaengerLastUngebrem: string
      read FTechnZulAnhaengerLastUngebrem write FTechnZulAnhaengerLastUngebrem;
    property LeistungsGew: string
      read FLeistungsGew write FLeistungsGew;
    property LaengeMin: string
      read FLaengeMin write FLaengeMin;
    property LaengeMax: string
      read FLaengeMax write FLaengeMax;
    property BreiteMin: string
      read FBreiteMin write FBreiteMin;
    property BreiteMax: string
      read FBreiteMax write FBreiteMax;
    property HoeheMin: string
      read FHoeheMin write FHoeheMin;
    property HoeheMax: string
      read FHoeheMax write FHoeheMax;
    property StuetzLast: string
      read FStuetzLast write FStuetzLast;
    property BereifAchse1: string
      read FBereifAchse1 write FBereifAchse1;
    property BereifAchse2: string
      read FBereifAchse2 write FBereifAchse2;
    property GenehmigungsNr01: string
      read FGenehmigungsNr01 write FGenehmigungsNr01;
    property GenehmigungsDat01: string
      read FGenehmigungsDat01 write FGenehmigungsDat01;
    property BemerkungenAusnahmen: string
      read FBemerkungenAusnahmen write FBemerkungenAusnahmen;
    property Anmerkungen: string
      read FAnmerkungen write FAnmerkungen;
    property TxAnbringFzidnr: string
      read FTxAnbringFzidnr write FTxAnbringFzidnr;
    property Baumuster: string
      read FBaumuster write FBaumuster;
    property TxGetrTyp: string
      read FTxGetrTyp write FTxGetrTyp;
    property FelgeAchse1: string
      read FFelgeAchse1 write FFelgeAchse1;
    property FelgeAchse2: string
      read FFelgeAchse2 write FFelgeAchse2;
  end;
  {$M-}

  TecRmiDataDynArray = array of TecRmiData;

type
  {$M+}
  TKbaDataResult = class(TObject)
  private
    FSearchKey: string;
    FTooMuchResults: Boolean;
    FNumberOfResults: Integer;
    FNumberOfPossibleResults: Integer;
    FFoundData: TecRmiDataDynArray;
  public
    destructor Destroy; override;
  published
    property SearchKey: string
      read FSearchKey write FSearchKey;
    property TooMuchResults: Boolean
      read FTooMuchResults write FTooMuchResults;
    property NumberOfResults: Integer
      read FNumberOfResults write FNumberOfResults;
    property NumberOfPossibleResults: Integer
      read FNumberOfPossibleResults write FNumberOfPossibleResults;
    property FoundData: TecRmiDataDynArray
      read FFoundData;
  end;
  {$M-}

type
  TfrmMain = class(TForm)
    btnSpeed: TButton;
    procedure btnSpeedClick(Sender: TObject);
  private
    FTimer: TPrecisionTimer;
  public
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

destructor TKbaDataResult.Destroy;
begin
  ObjArrayClear(FFoundData);
  inherited Destroy;
end;

procedure TfrmMain.btnSpeedClick(Sender: TObject);
begin
  var data: TKbaDataResult := TKbaDataResult.Create;
  try
    var jsonFileName: TFileName := ChangeFileExt(Executable.ProgramFileName, '.json');
    var json: RawJson := StringFromFile(jsonFileName);
    if json = 'then
    begin
      SetLength(data.FFoundData, 500);
      for var i: Integer := 0 to High(data.FFoundData) do
      begin
        data.FFoundData[i] := TecRmiData.Create;
        for var run: TRttiCustomProp in Rtti.ByClass[TecRmiData].Props.List do
          run.SetValueText(data.FFoundData[i], TSynTestCase.RandomIdentifier(10 + Random(20)));
      end;

      if ObjectToJsonFile(data, jsonFileName) then
        json := StringFromFile(jsonFileName);
    end;

    FTimer.Start;
    if ObjectLoadJson(data, json) then
      ShowMessage(Format('Total time Delphi: %s', [FTimer.Time]));
  finally
    data.Free;
  end;
end;

initialization
  Rtti.RegisterObjArrays([
    TypeInfo(TecRmiDataDynArray), TecRmiData]);

end.
PS: Bitte verweise im mORMot Forum auf diesen Thread und schließe deine Anfrage.

Bis bald...
Thomas

Geändert von mytbo (10. Jan 2024 um 19:08 Uhr) Grund: Benchmark-Wert hinzugefügt
  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 00:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz