Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Speicherbenutzung nach wochenlanger Benutzung (https://www.delphipraxis.net/168800-speicherbenutzung-nach-wochenlanger-benutzung.html)

Alex_ITA01 20. Jun 2012 13:47

AW: Speicherbenutzung nach wochenlanger Benutzung
 
Hallo Himitsu,
anbei mal ein Ausschnitt des Strings, welcher mir nach Aufruf von Execute zurückgeliefert wird:

CPU: 0 % ( 0) Memory: 542 MB ( 542- 542) MemoryLoad: 67 % (67-67) DelphiMM: 96 MB (res 15 MB) FreeRAM: 1310 MB (1309-1312) PageFile: 3138 MB (3128-3147) Handles: 15995 (15995-15995)

Da steht bei Memory: 542 MB
Laut TaskManager verbraucht das Programm aber nur 157 MB.
Hast du eine Idee?

MemoryLoad: Ist das die Größe der Anwendung im Gesamtspeicher oder auf was bezieht sich die %-Zahl?

Gruß

himitsu 20. Jun 2012 14:12

AW: Speicherbenutzung nach wochenlanger Benutzung
 
"Memory" gibt den komplett belegten Speicherbereich an, innerhalb des virtuellen Speichers deiner Anwendung,
also inklusive MMFs und anderer verlinkter Speicherblöcke, wie z.B. die Codes der EXE und DLLs. Dazu dann auch noch reservierte Speicherblöcke und Blockanteile, wo aber nichts drin ist, welche aber dennoch nicht zur allgemeinen Nutzung verfügbar sind.

Dein Taskmanager zeigt nur den RAM, welchen es mit dem RAM oder der PageFile verlinkt hat. (nichts Reserviertes und keine MMFs, welche mit Speicher anderer Anwendungen oder mit einer Datei verunden sind)

Jupp, MemoryLoad ist aufr den gesamten Arbietsspeicher des System bezogen.

Alex_ITA01 20. Jun 2012 14:40

AW: Speicherbenutzung nach wochenlanger Benutzung
 
Also um das nochmal irgendwie zusammen zu bekommen... :-)

Die Anwendung macht ja nach einigen Wochen schlapp, weil ich wie in Post 1 geschrieben habe, an die 1,5 GB Speicher ran komme.
Das was in "Memory" von deinem String steht ist nicht der Speicher von meiner Anwendung sondern von allen Anwendungen oder?
Woher sonst der Unterschied zwischen 157MB Taskmanager (WorkingSetSize liegt das gleiche) und 542MB?!
Ich werde in den String noch den tatsächlichen Speicherverbrauch der Anwendung aufnehmen...

Sagt mal, wenn ich jetzt feststelle das nach ca. einer Woche der Speicher angestiegen ist (z.B. auf 1GB), gibt es dann Möglichkeiten herauszubekommen, welches Formular, welcher Thread oder welche Klasse wieviel Speicher wegnimmt? Damit ich irgendwie dahinterkommen kann wer sich diesen Speicher nimmt.
Nur zur Info: Die Anwendung hat ca. 200 Threads und an die 60 Formulare (welche teilweise dynamisch als auch statisch erzeugt werden). Deswegen würde ich natürlich gerne wissen, wer der Übeltäter ist...

Gruß

himitsu 20. Jun 2012 14:47

AW: Speicherbenutzung nach wochenlanger Benutzung
 
Nee, Memory ist nur der virtuelle/private Speicher deiner Anwendung.

MemoryLoad, FreeRAM und PageFile ist von allen Anwendungen, bzw. vom ganzen System.

direkt festlegen kann man das so nicht direkt.
FastMM kann man irgendwie in einen FullDebugModus versetzen ... ich bin mir nicht sicher, aber ich glaub da merkt der sich wer (Zeit, Code-Adresse und eventuell Thread) jeden Speicherblock reserviert hat.

Man könnte nun ein Snapshot vom Speicher machen (sich eine Liste aller Blöcke merken) und diesen dann vergleichen.

Und über FastMM bekommst du auch nur Speicher, welcher darüber reserviert wurde.
VirtuallAlloc müßte man z.B. hooken, um das auch noch mitzubekommen.

Schlimm sind solche falschen Speicherlecks.
z.B. könntest du über einen Timer TStringGrid.Create(Self) aufrufen, was stückchenweise speicher verschlingt, aber beim Beenden des Programms gibt der Owner (die Form) dieses "Speicherlecks" frei und FastMM bekommt davon garnicht mit, daß es "eigentlich" Speicherlecks waren.

sahimba 20. Jun 2012 15:01

AW: Speicherbenutzung nach wochenlanger Benutzung
 
Zitat:

Schlimm sind solche falschen Speicherlecks.
Wo wir dann wieder bei http://www.delphipraxis.net/1171749-post7.html wären ;)
Snapshots sind dort auch bereits (rudimentär) integriert. Weiter gibt es eine "Statistik" in welcher angezeigt wird, von welcher Klasse wie viele Objekte bisher erzeugt worden sind, wie viele derzeit noch "leben" etc. Der Callstack der Erzeugung kann angezeigt werden, und das ganze eben live. Das Ganze funktioniert auch für mehrere Threads.

himitsu 20. Jun 2012 15:39

AW: Speicherbenutzung nach wochenlanger Benutzung
 
Zitat:

Zitat von sahimba (Beitrag 1171794)
Snapshots sind dort auch bereits (rudimentär) integriert. ...

Auch in der Emba-Version, oder nur im "richtigen" FastMM?

sahimba 20. Jun 2012 16:50

AW: Speicherbenutzung nach wochenlanger Benutzung
 
Zitat:

Zitat von himitsu (Beitrag 1171798)
Zitat:

Zitat von sahimba (Beitrag 1171794)
Snapshots sind dort auch bereits (rudimentär) integriert. ...

Auch in der Emba-Version, oder nur im "richtigen" FastMM?

Ich sprach von meinem eigenen Tool: http://ddobjects.de/ddserver
Wie gesagt... die Version auf der Webseite ist vollkommen veraltet, ich habe aber eine ganz frische bei mir die ich dann irgendwann auch auf die freie Wildbahn herauslassen werde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr.
Seite 2 von 2     12   

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