Einzelnen Beitrag anzeigen

Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

Funktionsrückgabe freigeben

  Alt 9. Mär 2007, 16:05
Hallo.

Es geht um Funktionen, die für die Rückgabe einen Datentyp besitzen, der innerhalb der Funktionen ersteinmal erstellt werden muss.

Als Beispiel soll folgender Code dienen, den ich in einem älteren Posting fand:

Delphi-Quellcode:
function GetFileIcon(AFileName: string; AIndex: integer = 0): TIcon;
begin
  Result := TIcon.Create;
  Result.Handle := ExtractIcon(HInstance, PCHAR(AFileName), AIndex);
end;
Ich habe zum Testen nun simpel und einfach eine Zuweisung vorgenommen, die auch tadellos funktioniert:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  // Icon aus Exe auslesen und Image zuweisen
  Image1.Picture.Graphic := GetFileIcon('C:\Windows\NotePad.exe');
end;
Startet man nun den Taskmanager, so kann man schön beobachten, wie der Speicherbedarf dieser Testanwendung steigt, wenn man vielfach auf den Button klickt.

Nun betrachte ich stattdessen eine Prozedur als Lösung, bei der ich im ButtonClick eine TIcon-Variable anlege, erstelle und der Prozedur als Var-Parameter übergebe. Kehrt der Ablauf nach der Prozedur in das ButtonClick zurück, erfolgt die Zuweisung an Image1.Picture.Graphic. Danach gebe ich diese TIcon-Variable im ButtonClick frei.

Hierbei ist im Taskmanager beim Klicken auf den Button kein Zuwachs an Speicherbedarf zu erkennen.


Fazit:
Offensichtlich werden die Speicherresourcen nicht freigegeben, die von der Funktionen mit TIcon als Datentyp belegt wurden.

Frage:
Wie kann man den belegten Speicher einer Funktionen, wie sie in obigen Beispiel zu sehen ist, wieder freigeben?


Guido.
  Mit Zitat antworten Zitat