Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Freier Speicher wird nicht freigegeben (https://www.delphipraxis.net/7698-freier-speicher-wird-nicht-freigegeben.html)

jr72 19. Aug 2003 12:27


Freier Speicher wird nicht freigegeben
 
Ich habe eine komplexe Anwendung in Delphi,
das rund um die Uhr laufen muss. Da es immer
mehr Speicher verbraucht, muss es aber geregelt
neu gestartet werden.
Eine Prüfung des Speichers mit GetHeapStatus ()
het ergeben, daß die Anwendung immer mehr
freien Speicher (FreeSmall) belegt.

ca. 30 Min. nach Start des Programms:
TotalAddrSpace: 5.242.880
TotalCommitted: 4.997.120
TotalUncommitted: 245.760
TotalAllocated: 2.403.732
TotalFree: 2.369.048
=========
FreeSmall: 703.464
FreeBig: 1.665.584
Unused: 0
Overhead: 224.340
HeapErrorCode: 0

nach ca. 24 Stunden:
TotalAddrSpace: 44.040.192
TotalCommitted: 43.810.816
TotalUncommitted: 229.376
TotalAllocated: 4.373.880
TotalFree: 39.007.308
FreeSmall: 38.986.088
==========
FreeBig: 21.220
Unused: 0
Overhead: 429.628
HeapErrorCode: 0

Wie kann ich den MemoryManager zwingen den Speicher
wieder abzugeben bzw. wieder zu verwenden?

Jürgen

Alexander 19. Aug 2003 12:33

Re: Freier Speicher wird nicht freigegeben
 
Mit freeMem kannst du den Speicher wieder freigeben, den du zb mit GetMem dir registriest hast.
Vielleicht hilft es ja, aber sonst musst du vielleicht mal etwas relaevanten Code posten.

Luckie 19. Aug 2003 12:34

Re: Freier Speicher wird nicht freigegeben
 
Zitat:

Zitat von jr72
Wie kann ich den MemoryManager zwingen den Speicher
wieder abzugeben bzw. wieder zu verwenden?

In dem du reservierten Speicher wieder frei gibst? :roll:

sakura 19. Aug 2003 12:35

Re: Freier Speicher wird nicht freigegeben
 
:hi: und herzlich willkommen in der Delphi-PRAXiS :-)

IMHO liegt das Problem nicht so sehr am Speichermanager von Delphi, auch wenn der seine Macken hat, sondern eher daran, daß Du wahrscheinlich irgendwelche Objekte nicht sauber freigibst.

Ansonsten kannst Du ja einen Schwellwert einbauen und nach erreichen dieses Die Anwendung sich selbst neustarten lassen (siehe Hier im Forum suchenShellExecute)

...:cat:...

jr72 19. Aug 2003 13:11

Re: Freier Speicher wird nicht freigegeben
 
Da der Speicher in der Struktur THeapStatus als FreeSmall und nicht als TotalAllocated aufgeführt wird, gehe ich davon aus, dass er bereits
freigegeben wurde. Der Anteil von FreeSmall ist in der Zeit von 2 MB auf 38 MB angestiegen. Somt muss es doch etwas mit dem MemoryManager
zu tun haben.

sakura 19. Aug 2003 13:16

Re: Freier Speicher wird nicht freigegeben
 
Wo Du Recht hast...

Mal eine Frage. Nutzt Du viele VCL Klassen in Deinem Projekt. Da gibt es ein bekanntes Problem. Irgendwo im Forum war mal der Link :gruebel:

...:cat:...

jr72 19. Aug 2003 13:21

Re: Freier Speicher wird nicht freigegeben
 
Zitat:

Zitat von sakura
Wo Du Recht hast...

Mal eine Frage. Nutzt Du viele VCL Klassen in Deinem Projekt. Da gibt es ein bekanntes Problem. Irgendwo im Forum war mal der Link :gruebel:

...:cat:...

ja, es werden unter andrem folgende Komponeten genutzt:
- TeeChart
- MDI-Formulare
- QReport
- IB-Objects
- dynamsche Arrays
...

[edit=sakura]BBCode zugelassen. Mfg, sakura[/edit]

sakura 19. Aug 2003 13:47

Re: Freier Speicher wird nicht freigegeben
 
Links zum Thema Leaks in Delphi Memory.Manager (ist aber nicht der, den ich gesucht habe :gruebel:

http://codecentral.borland.com/codec...sting?id=14283
http://codecentral.borland.com/codec...sting?id=18735
http://codecentral.borland.com/codec...sting?id=16380

und

http://www.automatedqa.com/support/leaksd5.asp

...:cat:...

jr72 19. Aug 2003 15:12

Re: Freier Speicher wird nicht freigegeben
 
Ich werde den MemoryManager testen...

jr72 20. Aug 2003 07:43

Re: Freier Speicher wird nicht freigegeben
 
Status nach 16 Stunden Dauertest:
statt innerhalb von 24 Stunden von 10 MB auf 50 MB
in 16 Stunden von 10 MB auf 12 MB (laut TaskManager)

Leider funktioniert aber der Befehl GetHeapStatus() nicht mehr und dem
MemoryManager gibt es keine Funktion zur Statusermittlung.

Vielen Dank für die Hilfe

Jürgen


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