Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Speicherfressen. Übergabe von Objekten (https://www.delphipraxis.net/137113-speicherfressen-uebergabe-von-objekten.html)

Jackie1983 14. Jul 2009 17:34


Speicherfressen. Übergabe von Objekten
 
Servus,

habe in meiner Anwendung einen recht großen Speicherfresser.
Da die Anwendung aber schon etwas größer ist, ist es schwer den Speicherfresser zufinden.

Habe mal mit FastMM4 mir die Werte anzeigen lassen.
Wenn ich ein Objekt erstelle wie hier
Delphi-Quellcode:
var
  obj : TMeinObject;
begin
  obj : TMeinObject.create;
  fObjectlist.add(obj);
end;
diese Objekt dann später abfrage
Delphi-Quellcode:
Function getObj(index : integer) : TmyObject;
begin
  result := fObjectlist.objects[index];
end;

...

Procedure ...
var
  obj : Tmeinobject;
begin
  obj := GetObj(index);
  if obj = nil then exit;

  obj := nil;
end;
muss ich doch nur obj freigeben oder? bzw. die Variable wieder leeren.
Free kann ich ja nicht aufrufen da ich das Objekt ja noch in der Liste habe...

Mfg

Apollonius 14. Jul 2009 17:39

Re: Speicherfressen. Übergabe von Objekten
 
Du musst die Variable auch nicht nillen. Wie erstellst du die TObjectList?

Jackie1983 14. Jul 2009 17:43

Re: Speicherfressen. Übergabe von Objekten
 
ganz normal.
obj := TObjectlist.create;

glaube das die Objecte freigegeben werden ist schon Standard true...

Es kommt auch immer die Meldung AnsiString x n
Weis nur nicht wie ich die ganzen Lecks finden soll....

mjustin 14. Jul 2009 19:08

Re: Speicherfressen. Übergabe von Objekten
 
Zitat:

Zitat von Jackie1983
Servus,

habe in meiner Anwendung einen recht großen Speicherfresser.
Da die Anwendung aber schon etwas größer ist, ist es schwer den Speicherfresser zufinden.

Habe mal mit FastMM4 mir die Werte anzeigen lassen.

FastMM4 kann man auch so einbinden und konfigurieren, dass die Quelltextzeilen protokolliert werden, in denen der Speicher reserviert wurde. Näheres siehe Doku ... Eine GUI für die FastMM4 Konfiguration gibt es auch, das FastMM4 Options Interface

http://jedqc.blogspot.com/2007/07/ne...interface.html

Ralf Kaiser 14. Jul 2009 19:50

Re: Speicherfressen. Übergabe von Objekten
 
Zitat:

Zitat von Jackie1983
muss ich doch nur obj freigeben oder? bzw. die Variable wieder leeren.
Free kann ich ja nicht aufrufen da ich das Objekt ja noch in der Liste habe...

Wenn du ein Objekt aus der Liste entfernen willst dann verwende einfach TObjectList.Delete() oder TObjectList.Remove().

Mit diesen Methoden wird das betreffende Objekt auch gleich freigegeben wenn die Liste die Objekte verwaltet (OwnsObjects = true). Bei der Freigabe der Liste werden dann sowieso alle Objekte freigegeben.


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