AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionsrückgabe freigeben

Ein Thema von Guido Eisenbeis · begonnen am 9. Mär 2007 · letzter Beitrag vom 11. Mär 2007
Antwort Antwort
Guido Eisenbeis

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

Re: Funktionsrückgabe freigeben

  Alt 10. Mär 2007, 02:58
Hallo Ingo.

Zitat von IngoD7:
Unabhängig von sonstigen Hirnschäden bei mir habe ich noch eine Frage zum Verständnis:

Was wird denn überhaupt mit dem zwischenzeitlichen Erzeugen eines TIcons gewonnen?
Oder anders:
Was spricht gegen eine direkte Zuweisung des Handles?
Image1.Picture.Icon.Handle := ExtractIcon(HInstance, PCHAR('C:\Windows\NotePad.exe'), 0);
Irgendwie habe ich das Gefühl, in einem "rekursiven Threadaufrufing" zu stecken!

Erinnerst du dich noch an das Thema dieses Threads? *nicht-bös-gemeint* Das Beispiel ist auch nicht schlecht gewählt! Denn es geht in diesem Thread NICHT darum, ein Icon zu extrahieren und einem Image-Control zuzuweisen.

Wie Chris schon sagte, ist das TIcon nur ein Beispiel. Ginge es darum, hättest du natürlich recht: Durch die direkte Zuweisung des Icon-Handles aus der Rückgabe von ExtractIcon würde lediglich eine Referenz auf das "Icon[0]" der NotePad.exe-Ressourcedatei erzeugt und es würde auch nur einmal Speicher belegen.

In diesem Thread geht es aber um was ganz anderes: Wie man Speicher freigibt, der durch Funktionen belegt wird, die ein Objekt als Rückgabe liefern.

Ich denke, dass die Beiträge in diesem Thread und die Tests die ich durchgeführt habe aber deutlich zeigen, dass die Prozedur-Lösung der Funktion-Lösung vorzuziehen ist. Bei der Prozedur-Lösung kann man wirklich modular programmieren. Damit meine ich, dass der Code, der sich in der Prozedur befindet, soweit gekapselt ist, dass man sich außerhalb nicht mehr drum zu kümmern braucht. Man übergibt von außen einen Variablen-Parameter (Objekt), der dann auch außen freigegeben werden kann/muss und alles Andere wird innerhalb der Prozedur erledigt.

Meine (Taskmanager-Minimal-) Tests mit der Funktion-Lösung haben folgendes ergeben: Trotz zwischenzeitlichem Erzeugen eines TIcons wächst bei vielfachem Aufrufen der Funktion die Speicherbelegung. Zwar um einiges langsamer, aber dennoch.

Abschließend nochmals vielen Dank an alle!


Eine(n) hab ich noch:

Zitat von IngoD7:
Natürlich immer fein mit Image1.Picture.Icon.ReleaseHandle; freigeben.
An welcher Stelle des Codes würdest du das aufrufen?

Auch in der Hilfe zu ExtractIcon steht:
Zitat:
Remarks
You must destroy the icon handle returned by ExtractIcon by calling the DestroyIcon function.
Ich kann aber das Icon nicht freigeben, solange ich es in Image1 noch benötige. Muss man sich da noch bei Programmende drum kümmern, oder erfolgt dann eine Freigabe automatisch?


Guido.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz