AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Memory Leaks beheben

Ein Thema von w4rheart · begonnen am 18. Dez 2010 · letzter Beitrag vom 22. Dez 2010
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
w4rheart

Registriert seit: 16. Mär 2010
53 Beiträge
 
#1

Memory Leaks beheben

  Alt 18. Dez 2010, 22:11
Hallo zusammen!

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

Das heisst also, dass irgendwo ziemlich schlecht programmiert wurde
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... )
Wäre nett =)

MfG
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Memory Leaks beheben

  Alt 18. Dez 2010, 22:15
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
w4rheart

Registriert seit: 16. Mär 2010
53 Beiträge
 
#3

AW: Memory Leaks beheben

  Alt 18. Dez 2010, 22:20
wenn ich in From1.Create ReportMemoryLeaksOnShutdown:=true setze kommt da undefinierter bezeichner.
welche unit muss ich dafür einbinden?
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Memory Leaks beheben

  Alt 18. Dez 2010, 22:49
Keine, da es in der implizit eingebunden Unit System definiert ist. Aber eben erst bei neueren Delphi-Versionen.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
w4rheart

Registriert seit: 16. Mär 2010
53 Beiträge
 
#5

AW: Memory Leaks beheben

  Alt 18. Dez 2010, 22:52
hab delphi 7
wenn ich System enbinden will kommt Bezeichner redefiniert.
und nu?
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Memory Leaks beheben

  Alt 18. Dez 2010, 23:03
Ich sagte ja, System ist implizit eingebunden. Selbst wenn du die ganze Uses-Klausel entfernst, System wäre trotzdem eingebunden

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" ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Memory Leaks beheben

  Alt 18. Dez 2010, 23:22
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...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
w4rheart

Registriert seit: 16. Mär 2010
53 Beiträge
 
#8

AW: Memory Leaks beheben

  Alt 19. Dez 2010, 00:17
Hallo nochmal.
Habe jetzt ein Programm welches mir anzeigt, in welcher Zeile des Codes die Leaks auftreten..
Es sind so einige Leaks 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
Miniaturansicht angehängter Grafiken
memoryleaks.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#9

AW: Memory Leaks beheben

  Alt 19. Dez 2010, 02:32
Gibst du die Form, bzw. Andorra auch wieder frei?
Jedenfalls steht da in dem Bild irgendwas von Form1 mit drin.


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

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ß.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Memory Leaks beheben

  Alt 19. Dez 2010, 08:33
Hallo,

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
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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