AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Datenstruktur: Kindobjekt als Objekt oder Record
Thema durchsuchen
Ansicht
Themen-Optionen

Datenstruktur: Kindobjekt als Objekt oder Record

Ein Thema von Friday · begonnen am 4. Mai 2022 · letzter Beitrag vom 4. Mai 2022
Antwort Antwort
Seite 2 von 2     12   
Friday

Registriert seit: 6. Mai 2008
101 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Datenstruktur: Kindobjekt als Objekt oder Record

  Alt 4. Mai 2022, 16:43
Ich stehe auf dem Schlauch - Inwiefern ist das ein Problem?
Der auf dem Schlauch steht bin wohl ich selbst
Hatte das mehrfach gelesen, aber immer falsch verstanden. Records können natürlich keine Interfaces implementieren im Sinne von
MyRec = Record(IMyInterface) Aber sehr wohl interfaces als Felder oder properties haben.

OK...also nochmal weniger das gegen Records spricht.

Aber wie seht ihr das Argument den Stack nicht unnötig mit langlebigen Daten zu befüllen? (Die noch dazu keinen Geschwindigkeitsvorteil benötigen weil selten kopiert)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Datenstruktur: Kindobjekt als Objekt oder Record

  Alt 4. Mai 2022, 16:48
Auf einem PC (im Gegensatz zu einem kleinen Mikrocontroller) muss man echt schon einiges anstellen um den Stack voll zu bekommen. Standardmäßig ist die Stack-Größe (pro Thread) in Delphi bei 1 Megabyte (lässt sich einstellen).

Ich bin kein Compiler/Assemblercode-Experte, aber ich würde dem Compiler durchaus zutrauen dass er die Register bzw. den Memory für den Stack wiederverwendet und bei z.B. 5 dicken Records nicht fünf mal allokiert. Und: Wenn man die Daten als const oder [Ref] übergibt, dann optimiert der Compiler das dorthin gehend, dass die Daten nur per Zeiger übergeben werden.
  Mit Zitat antworten Zitat
mytbo

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

AW: Datenstruktur: Kindobjekt als Objekt oder Record

  Alt 4. Mai 2022, 17:36
Aber wie seht ihr das Argument den Stack nicht unnötig mit langlebigen Daten zu befüllen?
Ich weiß nicht, warum du dir Sorgen um den Stack machst. So wie ich deine Anforderung verstanden habe, wird es vermutlich mit einem "array of ..." enden und damit landest du auf dem Heap. Auf dem Heap werden angelegt: Klassen, dynamische Arrays, alle gemanagten Typen (String, Variant, Interface) und Speicher der mit GetMem() oder New() angefordert wird. Daher funktioniert auch Folgendes problemlos:
Delphi-Quellcode:
uses
  mormot.core.base,
  mormot.core.data,
  mormot.core.text,
  mormot.core.json,
  mormot.core.unicode,
  mormot.core.variants,
  mormot.core.os,
  mormot.core.perf;

procedure SpeedTestRecords;
type
  TSubItem = record
    id: Integer;
    value: RawUtf8;
  end;
  TDataItem = record
    id: Integer;
    value: RawUtf8;
    subItem: TSubItem;
  end;
  TDataItems = array of TDataItem;
var
  json, xml: RawByteString;
  timer: TPrecisionTimer;
  items: TDataItems;
begin
  SetLength(items, 1000000);
  for var i: Integer := Low(items) to High(items) do
  begin
    items[i].id := i;
    items[i].value := StringToUtf8('value' + i.ToString);
    items[i].subItem.id := i;
    items[i].subItem.value := StringToUtf8('subItem_value' + i.ToString);
  end;

  timer.Start;
  json := DynArraySaveJson(items, TypeInfo(TDataItems));
  timer.Pause;
  FileFromString(json, '_testData.json');

  timer.Resume;
  xml := JsonToXML(json);
  timer.Pause;
  FileFromString(xml, '_testData.xml');

  WriteLn(Format('Total time: %s', [timer.Stop]));
end;
Habe ich schon erwähnt, dass mORMot diese 1M Records JSON und XML Serialisierung in 1 Sekunde schafft.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:06 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