Einzelnen Beitrag anzeigen

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