Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi tcomponent Größe bestimmen (https://www.delphipraxis.net/171902-tcomponent-groesse-bestimmen.html)

DrUArn 30. Nov 2012 21:19

tcomponent Größe bestimmen
 
Hi, comm,

gibt es eine tcomponent (tpersistent-, tobject-)-Eigenschaft/Funktion,
mit der man die Gesamtgröße eines solchen Elementes in Byte bestimmen könnte?

Glaube mich zu erinnern, das in Borland-Object-Pascal so etwas wie
tobjet.size implementiert war, welches den Speicherbedarf z.b. beim Schreiben oder Lesen bestimmen ließ.

Delphi-Quellcode:
type
 tSpeicherComp = Class(tcomponent)
   private
    i:integer;
    s:string[10]
   published
 end;

var sp:tSpeichercomp;
 sp:=Tspeichercomp.create(nil);
 sp.i:=10;
 s:='Willi';
Wieviel Platz braucht die Sp auf der Platte?
Sizeof(sp)+sizeof(i)+ sizeof(s)=4+4+11=19?

Grüße Uwe

himitsu 30. Nov 2012 22:06

AW: tcomponent Größe bestimmen
 
Die "Größe" bekommt man über die RTTI, oder Delphi-Referenz durchsuchenInstanceSize :roll:

Und nein, effektiv ist das einfach nicht möglich, bzw. mit einfachem Aufwand (mit der RTTI jeden Untertypen durchgehn) und bei "Pointern" garnicht (Gut, man kann den Speichermanager fragen, aber der kennt nicht die "echte" Größe Bytegenau) und bei vrlinkten Objekten ist es auch nicht wirlich sicher, denn snd die Objekte nur verlinkt, oder gehört das Eine Objekt dem Anderen?

Und nein, wieviel Speicher das auf der Platte braucht, kannst du so nicht bestimmen, denn ob wirklich alle Felder gespeichert werden, ist garnicht immer so genau bestimmbar und von Außen ist aucn nicht bestimmbar in welchem Format (einen String kann man ja als ANSI, UFT-16, UTF-8 oder Sonstwas speichern ... darum hat TPersisten auch Methoden um sich selber zu speichern, weil kein Fremder Bescheid weiß. :angle2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 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