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
 
mytbo

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

AW: REST.Json extrem langsam?

  Alt 10. Jan 2024, 17: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 18:08 Uhr) Grund: Benchmark-Wert hinzugefügt
  Mit Zitat antworten Zitat
 

 

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 22: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