Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#7

AW: Kann man einen Record in einem String speichern?

  Alt 4. Nov 2021, 08:28
Der Benutzername ist Programm ��
Ja ich versuche coolen code vom Stigma zu befreien er sei schlechter als coole Datenstructuren.
Ich würde mir mal das Speicherlayout von Records und Strings anschauen, ob dort die Referenzzähler an der gleichen Stelle sitzen.
Meinst Emba hat verschiedene ARC systeme ? Eins für Records , ein anderes für LongStrings und ein drittes für Dyn-Arrays?

Vielleicht so ?
http://francois-piette.blogspot.com/...rd-tofrom.html

Ich würde mir aber die JsonSerializer und verschiedenen Libraries dazu mal ansehen,
statt String direkt in einen modernen JsonString.
https://grijjy.github.io/GrijjyFound...alization.html
Sorry es geht mir nicht ums serialisieren. Ich möchte einfach nur an ein FMX Objekt (TListBoxItem ) einen Record anhängen. So wie man auch Integers, floats, Objects und Strings an ein TListBoxItem anhängen kann. Nach Möglichkeit so, dass der Refcount mitspielt.

Ich packe immer alles in ein Objekt rein, was nicht bei drei auf den Bäumen ist. *hehe*
Ich bin für viele Dinge zu Daten-Records in TArrays<Datenrecord> übergegangen. Vor allem weil man sowas auch mal als Rückgabe Wert haben kann ohne Bauchschmerzen zu bekommen was das Zerstören der Objekte angeht.

Es sind ja beides Managed types die sich selbst freigeben und mit Copy on Write arbeiten.
Wie bitte? Nur strings haben CoW.
Wenn ich einen Record als Parameter einer Funktion übergebe und ihn in der Funktion nur lesend verwende, dann wird der doch wie ein VAR, IN oder CONST Parameter vom Compiler behandelt oder nicht?
Auf jedenfall ist für meinen Verwendungszewck vor allem ARC das wichtige Attribut. CoW wäre aber schon nice to have.


Ja, nur LongStrings.

dynamische Arrays nicht.

Intern ist ein LongString (AnsiString/UnicodeString) zwar auch nur fast ein "dynamisches" Array, aber leider kann man Copy-On-Write nicht für andere Array-Typen aktivieren.

Delphi-Quellcode:
A := B; // nur Referenzzähler erhöhen
A[0] := 123; // nur bei String wird vorher automatisch ein Unique ausgeführt ... bei anderen Arrays änders du den Wert in Beiden

// außer
A := Copy(B); // wirklich kopieren
A[0] := 123; // ändert nur A
Es geht ja um records also haben Records genug mit String oder TObject gemein das ich sie als TagString oder TagObject speichern kann und die Refcount Mechanik erhalten bleibt?
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 4. Nov 2021 um 08:49 Uhr)
  Mit Zitat antworten Zitat