AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Speicher freigeben TBitmap. Aber wann?
Thema durchsuchen
Ansicht
Themen-Optionen

Speicher freigeben TBitmap. Aber wann?

Ein Thema von BrotherLui · begonnen am 20. Okt 2006 · letzter Beitrag vom 20. Okt 2006
Antwort Antwort
BrotherLui

Registriert seit: 14. Jun 2006
26 Beiträge
 
Delphi 7 Enterprise
 
#1

Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 18:51
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:
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;
so jetzt benötige ich aber das array die komplette Laufzeit bis das Programm beendet wird, da ständig Bilder verglichen werden.


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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 18:53
Wenn du die Bilder, die gesamte Laufzeit des Programmes brauchst, darfst du sie erst bei Programmende wieder freigeben (.onClose)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 18:57
Zitat:
Sonst entstehen Speicherlöcher.
Eher eine Speicherverschwendung bis zun neustart des PC's...

Zitat:
Wann soll ich jetzt den Speicher freigeben?
Na, wenn du sie nicht mer brauchst.

Zitat:
Wenn ich es nicht tue entsteht dann ein Speicherleck?
siehe oben

Zitat:
Gilt das gleiche auch für InI - Objektte?
ja.

Im Grunde für alles was du mit ....Create erstellst.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
BrotherLui

Registriert seit: 14. Jun 2006
26 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 19:02
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?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 19:05
Moin BrotherLui,

Zitat von BrotherLui:
Also dann liegt das Problem woanders?
anzunehmen.
Vielleicht solltest Du das Programm mal mit Bei Google suchenMemProof checken.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 19:07
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?
  Mit Zitat antworten Zitat
BrotherLui

Registriert seit: 14. Jun 2006
26 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 19:16
hier werden die Bilder verglichen

Delphi-Quellcode:
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;
der Aufruf:
Delphi-Quellcode:
if (istgleich(scrshot,bilder[i]) = 1) then ...
scrshot.free;
Danke für die Hilfe
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 19:21
hmm, ok, scrshot wird ja freigegeben. (ist also ok)
Sonst noch irgendwelche Instanzen/Klassen im Programm?
  Mit Zitat antworten Zitat
BrotherLui

Registriert seit: 14. Jun 2006
26 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Speicher freigeben TBitmap. Aber wann?

  Alt 20. Okt 2006, 19:26
Zitat:
Sonst noch irgendwelche Instanzen/Klassen im Programm?
Ja bestimmt. Ich werd die alle mal penibel durchgehen. Ich weiß jetzt auch ungefähr was ich wissen wollte und auf was ich achten muss.

Vielen Dank nochmal (Muetze1)
  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 23:54 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