Einzelnen Beitrag anzeigen

Der schöne Günther

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

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

  Alt 16. Jan 2024, 09:13
Ein TDictionary ist an sich nicht komplex, das ist ja nur ein "Zeiger" auf einen Bereich anderswo, außerhalb des Records. Eben deshalb musst du das Dictionary explizit wieder freigeben.

Es gibt noch Typen bei denen der Compiler (bzw. die automatische Referenzzählung "ARC") sich darum kümmert, den Speicher wieder freizugeben. Das ist beispielsweise der Fall bei Strings, oder dynamischen Arrays. Da musst du dich auch nicht drum kümmern. Würdest du ein für dich passendes Interface um dein TDictionary basteln und dann ein IDictionary verwenden, müsstest du dich um die Freigabe auch nicht mehr kümmern 😊


Meine Frage wäre noch, weshalb das packed ? Bist du dir sicher, dass du das brauchst? Ich kenne das eigentlich nur, wenn du eine Struktur 1:1 serialisieren willst (z.B. für Netzwerk-Übertragung oder Speichern in eine Datei), aber das kann man sich eh schenken wenn du zeigerbasierte Typen (wie z.B. ein Dictionary) drin hast.

packed macht den Speicherzugriff auf Teile des Records nur langsamer, weil verhindert wird, dass (für dich unsichtbare) Lücken zwischen den Feldern des Records gepackt werden, damit der Computer für ihn besser den Speicher da rauslesen kann.
  Mit Zitat antworten Zitat