![]() |
Memory Leak nach Zuweisung eines Resourcestream
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich hoffe in dieser Rubrik richtig zu sein. Meine Frage gilt folgender Zuweisung und anschließendem Memory Leak:
Delphi-Quellcode:
Nach Beendigung des Programms bekomme ich beigefügte Meldung über unerwartete (schwarze) Löcher im Speicher. Das leuchtet mir schon ein, aber wie bekomme ich das Loch gestopft?
procedure TFormViewFinMathZins.FormCreate(Sender: TObject);
begin Image1.Bitmap.LoadFromStream(TResourceStream.Create(HInstance, 'EWoZZ', RT_RCDATA)); end; Wähle ich folgende Variante:
Delphi-Quellcode:
habe ich logischerweise das Problem nicht.
procedure TFormViewFinMathZins.FormCreate(Sender: TObject);
var Stream: TStream; begin Stream:= TResourceStream.Create(HInstance, 'EWoZZ', RT_RCDATA); Image1.Bitmap.LoadFromStream(stream); FreeAndNil(stream) end; Meine Frage: Ist es möglich bei der ersteren (eleganteren) Variante die Ressource zu beenden? Vielen Dank für eure Mühe und viele Grüße Peter |
AW: Memory Leak nach Zuweisung eines Resourcestream
Die zweite Variante ist die richtige, allerdings solltest Du das mit einem try finally Block machen.
Delphi-Quellcode:
Du kannst Dir allerdings den stream sparen, TBitmap hat auch eine LoadFromResourceName-Methode...
procedure TFormViewFinMathZins.FormCreate(Sender: TObject);
var Stream: TStream; begin Stream:= TResourceStream.Create(HInstance, 'EWoZZ', RT_RCDATA); try Image1.Bitmap.LoadFromStream(stream); finally stream.free; end; end; |
AW: Memory Leak nach Zuweisung eines Resourcestream
Zitat:
Nachtrag: Peter hat schon den richtigen Hinweis gegeben. Bis bald... Thomas |
AW: Memory Leak nach Zuweisung eines Resourcestream
Vielen Dank an Peter und Thomas,
es sind gleich einige nützliche Tipps. Danke dafür. Ich tue mich bei den Try .. finaly Blöcke etwas schwer und bin eher versucht alles mit Try-Blöcken zu schützen, als zu wenig. Dann frage ich mich, ist es nicht auch Ressourcen-Verschwendung? Try-Blöcke sehe ich voll und ganz ein, bei Fällen wie oben. Also laden von -Bildern -Formulare -Ressourcen allgemein: Dateien Haben Try-Blöcke Grenzen? Darf ich noch eine Frage stellen? Ich muss in mein kleines FinMath-Programm viele Formeln als PNG laden. Ist dies über "Ressourcen und Bilder" der richtige Weg oder gibt es einen besseren, hinsichtlich Ressourcen schonen? Ich weiß nie so richtig, wonach ich entscheiden soll. Gerade wenn ein Programm viele Graphiken (PNG) anzeigen soll bläht das Programm sehr stark auf. Wie geht man vor? Vielen Dank noch mal |
AW: Memory Leak nach Zuweisung eines Resourcestream
Hallo,
du kannst die PNGs ja auch als Dateien mitliefern und diese laden. z. B. in ein TImage oder TBitmap etc. Dann sind die mal nicht in der exe-Datei drin. Grüße TurboMagic |
AW: Memory Leak nach Zuweisung eines Resourcestream
Zitat:
![]() Bis bald... Thomas |
AW: Memory Leak nach Zuweisung eines Resourcestream
ja, von Datei ist eine Möglichkeit und wenn man nicht möchte, dass der User die Dateien selber nutzt, wäre vielleicht eine verschlüsselte Zip-Datei eine Möglichkeit. ZIP klingt gut.
Wird das Programm so nicht langsam? Ich frage mich gerade, wie machen das eigentlich Spieleprogrammierer? Viele Texturen sind schließlich nachwievor Bilder. Du hast recht Thomas, es kommt tatsächlich auf die Menge an. Möglicherweise nutzen Spieleprogrammierer wohl eine SQLite Datenbank. Wie mache ich eine Reccourcen-DLL? Wie so oft, es kommt wohl auf den Einzelfall an. Danke TurboMagic und Thomas |
AW: Memory Leak nach Zuweisung eines Resourcestream
Zitat:
![]() Infos zum Thema "Resource-DLL" findest du hier im Forum. Bis bald... Thomas |
AW: Memory Leak nach Zuweisung eines Resourcestream
wie:
eine leere DLL erstellen und da deine Ressourcen rein Manuell über eigene RES, bzw. RC, via
Delphi-Quellcode:
, bzw.
{$R ...}
Delphi-Quellcode:
,
{$RESOURCE ...}
und/oder über die Projekt-Resource (Mainmenü > Projekt > Ressourcen und Bilder) und dann beim Laden statt HInstance (dem Handle der EXE), das Handle der DLL verwenden. LoadLibrary oder ![]() oder GetModuleHandle, wenn die DLL statisch eingebunden wurde, bzw. bereits geladen ist. |
AW: Memory Leak nach Zuweisung eines Resourcestream
Danke Himitsu,
klingt gut, aber auch kompliziert. Ich habe mir Deine Antwort kopiert, um es auszuprobieren. Könnte eine weitere gute Möglichkeit sein, Bilder in einem Programm zu verwenden. Neben ZIP und SQLite. Mit dem Link von Thomas bekomme ich eine Orientierung. Am liebsten wäre mir ja SVG, aber das hat halt Grenzen. Ich denke in vielen Fällen führt kein Weg an Pixel-Bilder vorbei. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 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 by Thomas Breitkreuz