![]() |
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ß |
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. |
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ß |
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. |
AW: Speicherbenutzung nach wochenlanger Benutzung
Zitat:
![]() 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. |
AW: Speicherbenutzung nach wochenlanger Benutzung
Zitat:
|
AW: Speicherbenutzung nach wochenlanger Benutzung
Zitat:
![]() 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 22:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz