Autor Beitrag
Fehma
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 21.12.04 12:23 
Hallo,

meine Kentnisse in Delphi sind leider nicht so gut. 8)
Ich habe eine Klasse in Delphi und ich muß zur Laufzeit ermitteln, wieviel Speicher diese Klasse im Speicher ( Memory ) braucht.

Ich möchte ein Programm schreiben, das dann immer anzeigt wieviel Speicher gerade von Ihm belegt ist.

Ich danke euch .......

gruß

MK
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Di 21.12.04 12:39 
Fehma hat folgendes geschrieben:
Ich möchte ein Programm schreiben, das dann immer anzeigt wieviel Speicher gerade von Ihm belegt ist.


Schau dir vllt mal Suche im MSDN GLOBALMEMORYSTATUSEX an. Da dann den freien vom vorhandenen virtuellen Speicher abziehen, das sollte das sein, was dein programm gerade belegt.

MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Fehma Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 21.12.04 12:47 
Leider nützt das nicht da ich ja dann nicht pro Klasse ( und ich habe mehrere Instanzen von mehreren Unterschiedlichen Klassen ) bestimmen kann, wie groß eine Instanz ist bzw wieviel Speicher sie benötigt.

Trotzdem Vielen Dank
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Di 21.12.04 12:52 
Ich glaube nicht, dass du das bekommen kannst. Ich dachte du willst in erster Linie eben den Speicherverbrauch deines ganzen Progs (das solltest du mit oberer Funktion rausbekommen!) wissen und dachtest, dass du dazu eben die Größen der einzelnen Klassen haben willst.



MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 21.12.04 13:21 
TObject.InstanceSize
Returns the size in bytes of each instance of the object type.
Fehma Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 21.12.04 13:38 
Hallo,

ersteinmal vielen Dank.

Tja das mit <object>.InstanceSize ist so eine Sache.
Damit bekomme ich schon eine gewisse Aussage darüber wie groß eine Klasse ist aber leider nicht genau das was ich brauche.
Denn wenn Ihr Methoden in der Klasse habt, dann werden diese Methoden nicht miteinbezogen.
InstanceSize gibt nur die Größen der verwendeten Typen, Variablen zurück....

d.h. es muss was mit der memoryVerwaltung zu tun haben
...... Hilfe !!!!

MK
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Di 21.12.04 13:39 
Luckie hat folgendes geschrieben:
TObject.InstanceSize
Returns the size in bytes of each instance of the object type.


Oha, gut :) Wusst ich noch net. Bleibt hier dann aber die Frage, ob er den Speicher, den die Methoden brauchen mitzählt oder nicht (die liegen ja pro Klassentyp nur einmal im Speicher, d.h. alle Instanzen einer Klasse benutzen die im Speicher gleichen methoden). Außerdem sagt mir meine OH noch:

OH hat folgendes geschrieben:
InstanceSize sollte nur im Verlauf der Implementierung einer benutzerdefinierten Version von NewInstance aufgerufen werden.


Also ich würd nicht drauf schwören und das benutzen ;)

MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Fehma Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 21.12.04 13:48 
Yap,

hmmm es muss doch möglich sein zu ermitteln wie groß meine Klasse ist....
ICh habe die größen meiner Variablen, Typen = OK das kann ich ja über Sizeof() oder .InstanceSize ermitteln.

und die Methoden liegen ja ( je dachdem ) in einer VMT vor...
Da muss es doch einen weg geben, das herauszubekommen.

Ich bin für jeden Vorschlag dankbar...

MK
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 21.12.04 13:51 
Die Methoden liegen eh nur einmal im Speicher, und alle Instanzen der Klasse teilen sich diese.. warum willst du also auch wissen wie groß die Methoden sind? Ich dachte dir reicht die Größe der Klassen-Instanz und die gekommst du eben mit InstanceSize...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Fehma Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 21.12.04 14:05 
Nun ja,

ich will dem User später nicht einfach eine Zahl ( Größe ) vorgauckeln. Ich möchte schon die genaueste Größe darstellen.
Angenommen ich habe ein Menge Code , Referencen auf andere Klassen u.a. im Code. Da kann dann schon einigen zusammenkommen.

Daher meine Frage.

Außerdem macht es mich nun neugierig diese Information herauszubekommen. Das muss es doch geben.

Es gibt ja eine Menge Progs die das können. Dann muss es auch machbar sein ...

Gruß
MK
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 21.12.04 14:09 
Fehma hat folgendes geschrieben:
Es gibt ja eine Menge Progs die das können


Darf ich dich um ein Beispiel bitten?

AXMD
Fehma Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 21.12.04 14:14 
Ja kein Problem.

Der Code zeigt zwei Klassen. Die erster hat eine Referenz auf die Zweite.
Der Code in den Methoden ist eigenlicht egal. Nimm aber einfach an das dort wiederum Variablen und anderes ausgeführt wird.

Dafür will ich dann die Größe haben.....

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
TMyClass = class(TObject)
  private
    FField: Integer;
    FField1: Integer;
    FField2: TMyClass2;
  public
    function NewMethod: Integer;
    procedure NewMethod1;
    procedure NewMethod2;
  end;

  TMyClass2 = class(TObject)
  private
    FField: Integer;
    FField1: Integer;
  public
    procedure TueWas;
  end;


Danke MK
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Di 21.12.04 14:18 
Ich glaube AXMD wollte ein Beispiel für ein prog, das sowas kann ;)

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 21.12.04 14:23 
MrSaint hat folgendes geschrieben:
Ich glaube AXMD wollte ein Beispiel für ein prog, das sowas kann ;)


So ist es ;)

AXMD
Fehma Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 21.12.04 14:24 
Habe Hier leider keine Möglichkeit eine Email zu schreiben.

Habe Dir das aber noch mal als PN geschickt......

Sorry

MK
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 21.12.04 14:30 
Ich glaub du verstehst nicht, was ich dir sagen will :( Du sollst mir ein Programm sagen (den Namen, also zB MS Word), das sowas macht...

AXMD
Fehma Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 21.12.04 14:33 
Hee hee he

sieht den Wald vor Bäumen nicht... :lol:

Bin gerade so tief darin.... nun ja...

Also, zum Beispiel:

YBrowser = Tool für Powerbuilder

Hmm da war noch ein Tool wie AQTime aber an den Namen kann ich mich nicht erinnern.....

MK.....