[algemene vraag]
Ik zit met het probleem dat mijn programma een memoryleak bevat. En die probeer ik op te sporen. Dat laatste lukt niet erg met de standaard debugging optie's van Delphi. Heeft iemand suggestie's hoe ik die het makkelijkst kan vinden.
[/Algemene vraag]
Probleem nader gespecificeerd:
ik heb een programma dat ca. 2,1 miljoen GIFjes moet genereren. Door vele duizenden GIFjes volgens vaste regels te combineren. Hiertoe wordt dus elke keer een GIFje geladen, stukje eruit geknipt en daarna bewaard. Voor het gebruik van GIF binnen Delphi gebruik ik TGifImage van Anders Melander.
Voor de duidelijkheid heb ik een stukje code (compleet ingekort) en bewerkt, zodat er alleen een Form met daarop een TImage en TButton nodig zijn:
Regel 12 t/m 17 zijn nodig om een Palette-handle te krijgen met de juiste kleuren. Is voor dit probleem nauwelijks relevant.
Regel 19 t/m 21 creeert de nodige objecten.
Regel 28 wordt er een willekeurig GIFje geladen
Regel 29 wordt er een stukje uit de eerste tekening naar de 2e gekopieerd.
Regel 30 wordt de 1e tekening ge'free'ed. Pas toegevoegd toen ik de leak had ontdekt.
Regel 31 wordt het gekopieerde stuk in de kleuren van het Palette in Image1 geplaatst.
Regel 33 wordt de GIF met het nieuwe palette geplaatst in een TGifIMage
Regel 34 wordt de GIF weer bewaard.
Regel 36 en 37 worden de afbeeldingen ge'free'ed
Al die "FreeImage" heb ik toegevoegd toen ik de leak had ontdekt. Maar het lekt nog steeds.
Hoe kan ik de leak het makkelijkst opsporen.
[2e algemene vraag]
Wat zijn de relaties, verschillen en overeenkomsten tussen TBitmap, TCanvas, TImage en TPicture? Is hier een duidelijke site over? Of een goed boek?
[/2e algemene vraag]
Ik zit met het probleem dat mijn programma een memoryleak bevat. En die probeer ik op te sporen. Dat laatste lukt niet erg met de standaard debugging optie's van Delphi. Heeft iemand suggestie's hoe ik die het makkelijkst kan vinden.
[/Algemene vraag]
Probleem nader gespecificeerd:
ik heb een programma dat ca. 2,1 miljoen GIFjes moet genereren. Door vele duizenden GIFjes volgens vaste regels te combineren. Hiertoe wordt dus elke keer een GIFje geladen, stukje eruit geknipt en daarna bewaard. Voor het gebruik van GIF binnen Delphi gebruik ik TGifImage van Anders Melander.
Voor de duidelijkheid heb ik een stukje code (compleet ingekort) en bewerkt, zodat er alleen een Form met daarop een TImage en TButton nodig zijn:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| procedure TForm1.Button1Click(Sender: TObject); var BronImg:TRect; DoelImg:TRect; BronGIF, DoelGIF:TGifImage; Palette:hPalette; TempImg, Bitmap:TBitmap; Teller:LongInt; begin Palette := 0; Bitmap := TBitmap.Create; Bitmap.LoadFromFile('Palette.bmp'); if (Palette = 0) then Palette := CopyPalette(Bitmap.Palette); Bitmap.Destroy; BronGIF:=TGifImage.Create; DoelGIF:=TGifImage.Create; TempImg := TBitmap.Create; TempImg.Width:=100; TempImg.Height:=100; Bronimg:=Rect(10, 10,100, 100); DoelImg:=rect(0,0,90,90); for teller:=0 to 10000 do begin BronGIF.LoadFromFile('Input.gif'); TempImg.Canvas.CopyRect(DoelImg,BronGif.Bitmap.Canvas,BronImg); BronGif.Bitmap.FreeImage; Image1.Picture.Bitmap:=ReduceColors(TempImg, rmPalette, dmFloydSteinberg, 0, Palette); Image1.Repaint; DoelGIF.Assign(Image1.Picture); DoelGIF.SaveToFile('Uitvoer.gif'); Image1.Picture.Bitmap.FreeImage; DoelGIF.Bitmap.FreeImage; application.ProcessMessages; end; BronGIF.Free; DoelGIF.Free; end; |
Regel 12 t/m 17 zijn nodig om een Palette-handle te krijgen met de juiste kleuren. Is voor dit probleem nauwelijks relevant.
Regel 19 t/m 21 creeert de nodige objecten.
Regel 28 wordt er een willekeurig GIFje geladen
Regel 29 wordt er een stukje uit de eerste tekening naar de 2e gekopieerd.
Regel 30 wordt de 1e tekening ge'free'ed. Pas toegevoegd toen ik de leak had ontdekt.
Regel 31 wordt het gekopieerde stuk in de kleuren van het Palette in Image1 geplaatst.
Regel 33 wordt de GIF met het nieuwe palette geplaatst in een TGifIMage
Regel 34 wordt de GIF weer bewaard.
Regel 36 en 37 worden de afbeeldingen ge'free'ed
Al die "FreeImage" heb ik toegevoegd toen ik de leak had ontdekt. Maar het lekt nog steeds.
Hoe kan ik de leak het makkelijkst opsporen.
[2e algemene vraag]
Wat zijn de relaties, verschillen en overeenkomsten tussen TBitmap, TCanvas, TImage en TPicture? Is hier een duidelijke site over? Of een goed boek?
[/2e algemene vraag]
[ Voor 2% gewijzigd door jvdmeer op 11-03-2003 20:45 . Reden: TCanvas toegevoegd aan 2e vraag. ]