Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Speichernutzung einer Komponente ermitteln? (https://www.delphipraxis.net/146139-speichernutzung-einer-komponente-ermitteln.html)

moelski 14. Jan 2010 08:23


Speichernutzung einer Komponente ermitteln?
 
Moin !

Ist es eigentlich irgendwie möglich den Speicherverbrauch eine bestimmten Komponente zu ermitteln?

Ich habe hier ein AdvStringGrid und ein QuantumGrid6. Mich würde mal interessieren, wer die Daten platzsparender im RAM ablegt.

himitsu 14. Jan 2010 08:46

Re: Speichernutzung einer Komponente ermitteln?
 
Nein, es gibt keine Möglichkeit, da du nicht an alles rankommst und demnach nicht "zählen" kannst.

Du kannst höchstens die Komonenten dynamisch erzeugen und den Verbrauch vorher, mit dem Nachher vergleichen
und jenachdem, wie gut du deine Testumgebung gestaltet hast, ist der Differenswert dann auch relativ genau.

moelski 14. Jan 2010 08:47

Re: Speichernutzung einer Komponente ermitteln?
 
Ok Danke für die Info.

himitsu 14. Jan 2010 08:51

Re: Speichernutzung einer Komponente ermitteln?
 
Das Problem hatte ich grad auch in meinem himXML (in der CheckLibs-Demo).
Da dort leider oftmals verschiedene Speichermanager verwendet werden und das auch noch gleichzeitig,
also nicht alles z.B. über den DelphiMM läuft, kann man dort nur grob den globalen Verbrauch messen.

moelski 14. Jan 2010 08:55

Re: Speichernutzung einer Komponente ermitteln?
 
Mit dem ProcessExplorer kann man sich auch ganz gut einen Überblick verschaffen.

himitsu 14. Jan 2010 09:06

Re: Speichernutzung einer Komponente ermitteln?
 
Ganz genau geht es aber so eben nicht, da z.B. der DelphiMM mehr Speicher reserviert, als belegt ist.
Durch die Speicherfragmentierung und das "Unwissen" wieviel des Speichers zwar reserviert, aber nicht verwendet ist, kann es parktisch schon recht ungenau werden.

moelski 14. Jan 2010 09:10

Re: Speichernutzung einer Komponente ermitteln?
 
Moin !

Zitat:

da z.B. der DelphiMM mehr Speicher reserviert, als belegt ist.
Ok, aber man bekommt eine Vorstellung was der ganze Prozess verschlingt.

In meinem Fall habe ich mal mit AdvStringGrid (TMS) und QuantumGrid6 (DevExpress) geschaut was passiert wenn ich ~700000 Werte eintrage (2 Spalten).

Die Speicherlast die der Processexplorer anzeigt sagt schon alles:
TMS -> ~245MB
DevExpress -> ~90MB.

Da kommt es auf 1-2MB mehr oder weniger nicht an :-) Das ist mal eindeutig :-)

himitsu 14. Jan 2010 09:32

Re: Speichernutzung einer Komponente ermitteln?
 
nur mal was zum Thema Fragmentierung:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  i: Integer;
  M: array[1..25000000] of Pointer;

begin
  WriteLn(Length(M) * 10, ' Byte belegen - weiter mit [enter]');
  ReadLn;
  for i := Low(M) to High(M) do
    GetMem(M[i], 10);

  WriteLn;
  WriteLn('98% freigeben - weiter mit [enter]');
  ReadLn;
  for i := Low(M) to High(M) do
    if i mod 50 <> 0 then
      FreeMem(M[i]);

  WriteLn;
  WriteLn('nochmal 1% freigeben - weiter mit [enter]');
  ReadLn;
  for i := Low(M) to High(M) div 2 do
    if i mod 50 = 0 then
      FreeMem(M[i]);

  WriteLn;
  WriteLn('das restliche 1% freigeben - weiter mit [enter]');
  ReadLn;
  for i := High(M) div 2 + 1 to High(M) do
    if i mod 50 = 0 then
      FreeMem(M[i]);

  WriteLn;
  WriteLn('beenden - weiter mit [enter]');
  ReadLn;
end.
bin gespannt, was dir der Taskmanager darüber sagt

ist war ein etwas krasses Beispiel - z.B. in D7:
- 250 MB für GetMem + 100 MB für's Array
- 500 MB belegt
- nach Freigabe von 98% des Speichers immernoch 500 MB belegt
- ...

Fuchtel 14. Jan 2010 10:21

Re: Speichernutzung einer Komponente ermitteln?
 
Hallo,

zum genaueren ermitteln des Speicherverbrauchs gibt es VirtualMemoryMap

von SysinternalTools:

VMMap

Gibt es zwar nur in Englisch ist aber dafür FreeWare.


Fuchtel


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