Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie ermittelt man die Größe eines Objekts im Speicher? (https://www.delphipraxis.net/106851-wie-ermittelt-man-die-groesse-eines-objekts-im-speicher.html)

TonyMontana 17. Jan 2008 18:22


Wie ermittelt man die Größe eines Objekts im Speicher?
 
Diese Frage konnte mir in meinem letzten Thema keiner beantworten.

Es geht um ein Objekt, dass folgendermaßen aussieht:

Delphi-Quellcode:
type
  TMyRec = class(TObject)
  private
    FValue: Integer;
    FText: String;
    FStringList: TStringList;
    function GetList(i: Integer): string;
    procedure SetList(i: Integer; const Value: string);
  public
    property Value: Integer read FValue write FValue;
    property Text: string read FText write FText;
    property SringList[i: Integer]: string read GetList write SetList;
    constructor Create;
    destructor Destroy;
end;
Im Prinzip geht es mir darum, das Objekt in eine Datei zu speichern. Theoretisch ginge das ja auch wenn man einzeln die Felder einliest mit SizeOf und Length sollte man dann auch die Größe der Felder ermitteln können...
Allerdings wird das doch etwas umständlich, sollte die Klasse mal erweitert werden ...
Es muss doch irgendwie Möglich sein, zB einen Pointer auf den Anfang einer Klasseninstanz wie oben definiert zu setzen und dann Komplett in eine Datei "einzulesen", oder?
Dafür benötige ich aber eben auch die Größe der Klasseninstanz, ansonsten weiß ich ja nicht wie viel eingelesen werden soll.

Ich hoffe mal, ich konnte mein Problem deutlich machen. Vielleicht gibt es ja auch bessere Alternativen für diese Problemstellung?

Falls mir wieder keiner Antwortet, dann nehme ich einfach mal an, die Frage ist so trivial, dass ich erstmal ein Delphi-Buch lesen sollte um dann in der Lage zu sein mir die Frage selbst zu beantworten? :mrgreen:

Apollonius 17. Jan 2008 18:24

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
Delphi-Referenz durchsuchenInstanceSize

TonyMontana 17. Jan 2008 18:37

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
InstanceSize hatte ich auch schon probiert ... liefert mir irgendwie 16. Und das kann nicht sein, da ich vorher stehen hatte:
StringList.Text := ListBox1.Items.Text oder so... Wobei in der ListBox einiges stand!
Oder setze ich da wieder nur einen Pointer?
Auch wenn, dass hilft mir bei meinem Problem ja dann auch nicht weiter...
Also mehr und bessere Vorschläge :zwinker:

DeddyH 17. Jan 2008 18:38

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
Naja, FStringList enthält nur einen Pointer auf die Instanz.

Apollonius 17. Jan 2008 18:39

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
Ansistrings und Klassen sind Pointer. InstanceSize ist für alle Instanzen einer Klasse gleich (deshalb ist es auch eine Klassenmethode).

sirius 17. Jan 2008 18:43

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
Zitat:

Es muss doch irgendwie Möglich sein, zB einen Pointer auf den Anfang einer Klasseninstanz wie oben definiert zu setzen und dann Komplett in eine Datei "einzulesen", oder?
Nö. Geht nicht.
Du kannst dich ja mal hier und hier schlau machen.

TonyMontana 17. Jan 2008 18:46

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
Ist ja alles schön und gut und warscheinlich auch richtig, dennoch möchte ich ja nicht die Größe der Klasse sondern des Objekts. Und zwar aus dem Grund, weil ich das ganze Objekt dann mal speichern und irgendwann wiederladen möchte!
Geht das jetzt irgednwie oder verstehe ich irgendwas nicht? :wiejetzt:

@Sirius: Ok geht also nicht... Endlich mal ne klare Antwort und nicht irgendwelche Empfehlungen, wo ich dann irgendwann herausfinden muss, das hat mit meinem Problem bzw. meiner Fragestellung nichts zu tun.
Ich muss jetzt erst mal weg, mache mir mal Gedanken dann. Warscheinlich kann ich dann nur den Umweg mit length etc nehmen, mit der funktion bekomme ich da die Stringlänge heraus und kann mir alle Daten selber zusammensuchen und dann abspeichern.

Apollonius 17. Jan 2008 18:48

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
Das geht nicht. Wenn du zum Beispiel Zeiger in der Klasse hast, dann weißt nur du (und der Memorymanager), wie groß der Speicherblock ist, auf den sie zeigen. Strings und dynamische Arrays lassen sich noch über RTTI erkennen.

himitsu 17. Jan 2008 18:51

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
InstanceSize liefert die größe des Ojektes

und was da noch anderswo über Pointer unt Co. gelagert wird, ist da nicht enthalten.


für ein korrektes Ergebnis mußt du selber alles auslesen, aber das geht nur für eine eigene klasse, die du bearbeiten kannst.

DeddyH 17. Jan 2008 18:53

Re: Wie ermittelt man die Größe eines Objekts im Speicher?
 
Und zum Speichern: das wird spätestens dann ganz übel, wenn mehrere Instanzen in einer Datei abgelegt werden sollen. IMO müsste man sich dafür dann ein generisches Format ausdenken, aber ich lasse mich auch gerne eines Besseren belehren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
Seite 1 von 2  1 2      

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