![]() |
Speicher freigeben TBitmap. Aber wann?
Hallo,
ich habe gelesen mann muss den Speicher von Objekten wieder frei geben wenn man sie nicht mehr braucht. Sonst entstehen Speicherlöcher. Problem: Mein Programm beendet sich nach gewisser Zeit von selbst. Je schwächer der Rechner desto schneller. Daher die Vermutung es könnte hier dran liegen. Ich lade zu beginn des Programms Bilder in ein Array of TBitmap und gebe den Speicher nicht wieder frei.
Delphi-Quellcode:
so jetzt benötige ich aber das array die komplette Laufzeit bis das Programm beendet wird, da ständig Bilder verglichen werden.
var
bilder: array[0..36] of TBitmap; begin ... for i:=0 to anzahl do begin bilder[i] := TBitmap.Create; bilder[i].LoadFromFile(inttostr(i)+'.bmp'); end; ... end; Folgende Fragen: 1. Wann soll ich jetzt den Speicher freigeben? (bilder[i].free) 2. Wenn ich es nicht tue entsteht dann ein Speicherleck? 3. Gilt das gleiche auch für InI - Objektte? Von denen hab ich nämlich auch noch. Vielen Dank |
Re: Speicher freigeben TBitmap. Aber wann?
Wenn du die Bilder, die gesamte Laufzeit des Programmes brauchst, darfst du sie erst bei Programmende wieder freigeben (.onClose)
|
Re: Speicher freigeben TBitmap. Aber wann?
Zitat:
Zitat:
Zitat:
Zitat:
Im Grunde für alles was du mit ....Create erstellst. |
Re: Speicher freigeben TBitmap. Aber wann?
Danke für die schnellen Antworten.
Also dann liegt das Problem woanders? Denn wenn ich den Speicher erst im onclose wieder freigebe bringts ja nichts. Bis dahin ist er ja schon abgeschmiert! (Wie gesagt bei langsamen Rechnern dauerts so 20 Minuten bei schnellen mehrere Stunden.) Seh ich das richtig? |
Re: Speicher freigeben TBitmap. Aber wann?
Moin BrotherLui,
Zitat:
Vielleicht solltest Du das Programm mal mit ![]() |
Re: Speicher freigeben TBitmap. Aber wann?
Ja, ich denke da kann ich dir vorsichtig zustimmen. Aber ich habe eher die Vermutung, dass du beim "ständigen vergleichen" der Bilder welche nicht frei gibst. Kannst du diesen Teil des Quellcodes mal zeigen?
|
Re: Speicher freigeben TBitmap. Aber wann?
hier werden die Bilder verglichen
Delphi-Quellcode:
der Aufruf:
function Istgleich(bm1,bm2:TBitmap):single;
var x,y,br:integer; p1,p2:PByteArray; begin try result:=-1; br:=breitenwert(bm1); if br < 1 then exit; result:=0; if (bm1.width<>bm2.width)or(bm1.height<>bm2.height)or(bm1.pixelformat<>bm2.pixelformat)then exit; for x:=0 to bm1.height-1 do begin p1:=bm1.scanline[x]; p2:=bm2.scanline[x]; for y:=0 to br do if p1[y]<>p2[y] then exit; end; except ShowMessage('Fehler'); end; result:=1; // Muss ich vielleicht hier die bm1 und bm2 freigeben? end;
Delphi-Quellcode:
Danke für die Hilfe
if (istgleich(scrshot,bilder[i]) = 1) then ...
scrshot.free; |
Re: Speicher freigeben TBitmap. Aber wann?
hmm, ok, scrshot wird ja freigegeben. (ist also ok)
Sonst noch irgendwelche Instanzen/Klassen im Programm? |
Re: Speicher freigeben TBitmap. Aber wann?
Zitat:
Vielen Dank nochmal (Muetze1) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 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