Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.367 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Packed record mit Dictionary als Variable, Richtig aufräumen

  Alt 16. Jan 2024, 12:52
Daher die Frage muss ich ein Dict welches in einem packed record Created ist auch wieder freigeben oder ist dies egal?
Macht das ganze Konstrukt bzw. die Idee überhaupt Sinn bzw ist so umsetzbar?
Technisch bekommt man das zwar hin, aber ich halte es für keine saubere Lösung, wenn man manuell verwaltete Elemente wie Klassen in automatisch verwaltete Records packt. Umgekehrt ist das kein Problem, aber in der Richtung muss man immer aufpassen, dass man keinen Fehler macht.

Ein Problem ist z.B., dass ein Record beim Zugriff ggf. komplett kopiert wird, z.B. beim Abrufen aus einer Liste. Und schon hat man den Record zweimal im Speicher mit der gleichen einmal erzeugten Liste. Bei einer Klasse hast du dann nur zwei Referenzen auf den gleichen Speicher.

Insgesamt machst du dir das Leben an der Stelle deutlich einfacher, wenn du Klassen verwendest. Dort erzeugst du die Liste im Konstruktor und gibst sie im Destruktor frei. Dass das mit Records mittlerweile auch geht (Custom Managed Records), ist schon richtig, aber das ist dann nicht einfacher als mit Klassen, sondern an einigen Stellen ein großer Nachteil, und außerdem macht man leichter Fehler dabei.

Der einzige echte Vorteil von Records ist, dass bei massenhafter Verwendung (viele zehntausend z.B.) die Performance und die Speicherbelastung besser sind. Das macht sich aber wirklich erst bei sehr sehr vielen Records bemerkbar. Abgesehen von solchen Optimierungsproblemen überwiegen die Nachteile von Records gegenüber Klassen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat