Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Memory Leaks beheben (https://www.delphipraxis.net/156885-memory-leaks-beheben.html)

w4rheart 18. Dez 2010 22:11

Memory Leaks beheben
 
Hallo zusammen!

Bei meinem Programm treten andauernd memory leaks auf, und das nicht zu knapp :D
Hatte schon eine Auslastung von >500mb.

Das heisst also, dass irgendwo ziemlich schlecht programmiert wurde :roll:
Allerdings weiss ich nicht genau wo bzw. was das Problem ist.
Das Programm ist auch nich gerade klein (über 15 Units) und benutzt unter anderem auch noch Andorra 2d.

Wie behebt man soetwas?
Ich hab schon gegoogelt und Programme gesucht die mir das anzeigen, allerdings hilft mir das auch nicht wirklich weiter.

Gibt es für Delphi nicht evtl. so eine Art Addon eines Garbage Collectors wie bei C?

Meine Fragen sind evtl. etwas übergreifender, und nicht mal eben zu erklären, aber vll. hat jemand Links oder Ähnliches die mir weiterhelfen könnten? (Auf einem niedrigen Niveau bitte, bin kein Profi wie Ihr hier.. eher das Gegenteil... :lol:)
Wäre nett =)

MfG

xZise 18. Dez 2010 22:15

AW: Memory Leaks beheben
 
Du solltest erstmal Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown auf true setzen.

Dann kannst du eventuell schon eher einschätzen, was zum Problem werden könnte.

MfG
Fabian

w4rheart 18. Dez 2010 22:20

AW: Memory Leaks beheben
 
wenn ich in From1.Create ReportMemoryLeaksOnShutdown:=true setze kommt da undefinierter bezeichner.
welche unit muss ich dafür einbinden?

Deep-Sea 18. Dez 2010 22:49

AW: Memory Leaks beheben
 
Keine, da es in der implizit eingebunden Unit System definiert ist. Aber eben erst bei neueren Delphi-Versionen.

w4rheart 18. Dez 2010 22:52

AW: Memory Leaks beheben
 
hab delphi 7
wenn ich System enbinden will kommt Bezeichner redefiniert.
und nu?

Deep-Sea 18. Dez 2010 23:03

AW: Memory Leaks beheben
 
Ich sagte ja, System ist implizit eingebunden. Selbst wenn du die ganze Uses-Klausel entfernst, System wäre trotzdem eingebunden :wink:

Ich glaube FastMM wäre eine Möglichkeit. Bin da aber nicht gerade der beste Ansprechpartner für. Such doch einfach mal hier im Forum z.B. nach "Speicherleck" ...

stahli 18. Dez 2010 23:22

AW: Memory Leaks beheben
 
Suche mal in der DP nach "FastMM4" und "Optionen".
In der Ini von FastMM4 kannst Du einstellen, dass Dir eine komplexe Report-Datei erzeugt wird.

Habe es aber jetzt nicht im Detail parat...

w4rheart 19. Dez 2010 00:17

AW: Memory Leaks beheben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo nochmal.
Habe jetzt ein Programm welches mir anzeigt, in welcher Zeile des Codes die Leaks auftreten..
Es sind so einige Leaks :D direkt nach dem Start sogar 221 :(
Davon kommen die meisten aber nur 1x vor, im Anhang befindet sich ein Ausschnitt von denen, die am Häufigstens vorkommen.

Allerdings sehen die meisten Zeilen die mir das Programm liefert dann so aus:
Delphi-Quellcode:
AdImageList.LoadFromFile( 'bilder/bilder.ail' );

temp := TAdImage.Create(FParent);

Add(temp);

LoadFromStream(ms);

Rects.Add(AdRect(0,0,FWidth,FHeight));

new(ar);
ar^ := ARect;
inherited Add(ar);

LoadFromXML(xml.Root);
Die meisten Fehler spuckt also Andorra 2D aus.
Allerdings weiss ich jetz überhaupt nicht wie ich die beheben soll, bzw. wie Andorra anders nutzen soll!?

Andorra müsste aber doch eig. funktionieren, da es viele Spiele gibt die damit programmiert wurden etc.
Bei mir steigt der Speicher zum Teil pro sekunde um 4-5 mb!!!

Hilfe :pale:

himitsu 19. Dez 2010 02:32

AW: Memory Leaks beheben
 
Gibst du die Form, bzw. Andorra auch wieder frei?
Jedenfalls steht da in dem Bild irgendwas von Form1 mit drin.


Zitat:

Zitat von w4rheart (Beitrag 1069303)
Gibt es für Delphi nicht evtl. so eine Art Addon eines Garbage Collectors wie bei C?

pühhh, wir programmieren ordentlich und schlampen nicht so rum ... wir brauchen sowas nicht :tongue:

Zitat:

Zitat von w4rheart (Beitrag 1069307)
hab delphi 7

Sowas kann man übrigens in seinem Forenprofil angeben, oder man ibt sowas eben immer mit im Eingangspost an damit nicht ständig nachgefragt werden muß.

Zitat:

Zitat von w4rheart (Beitrag 1069307)
wenn ich System enbinden will kommt Bezeichner redefiniert.

Die Units System (wie schon genannt), SysInit und implizit auch die SysConst werden immer automatisch mit eingebunden.

hoika 19. Dez 2010 08:33

AW: Memory Leaks beheben
 
Hallo,

Delphi-Quellcode:
AdImageList.LoadFromFile( 'bilder/bilder.ail' );
Hast du auch irgendwo ein AdImageList.Clear bzw. AdImageList.Free ?

Du lädst einen Haufen Sachen, erzeugst Speicher (new ()ar),
aber ich sehe nirgendwo eine Freigabe nach der Benutzung.

Unter D7 könntest du auch memcheck benutzen.
Das hat den Vorteil, dass beim Beenden per Exeption die Stellen angeprungen werden,
wo er Speicher angefordert wurde.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 Uhr.
Seite 1 von 4  1 23     Letzte »    

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