Tags:
delphi
Jeg har et lille program kørende min computer, som jeg har fremstillet i Delphi.. Programmet kører i baggrunden, i tray. I programmet er en timer, med et interval på 5000. I denne timer ligger der et stykke kode, som læser forskellige ting fra registreringsdatabasen, samt udfører nogle ting hvis de læste værdier er noget bestemt.
Mit problem er, at hukommelsesforbruget bliver større og større. på 45 minutter, stiger forbruget fra cirka 3,6 MB, til omkring 4,6 MB.
Satte på et tidspunkt timerens interval til 1000, med samme funktion. Efter et par timer brugte mit lille program omkring 88 MB.
Hvordan kan jeg afhjælpe dette problem?
3 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Du har en memory leak et sted... du skal finde de steder hvor du opretter nogle objekter uden at nedlægge dem igen. Når de ikke bliver nedlagt så næste gang de bliver oprettet bliver de tildelt noget nyt hukommelse og derved bruger din applikation mere og mere hukommelse...
(¯`·._.·[Brian Hvarregaard]·._.·´¯)
Praesto et Persto
Ja..memory leaks er nok problemet. Når du "opretter forbindelse" til reg.basen ser det nok ca. sådan ud
var
Reg: TRegistry
begin
Reg:= TRegistry.Create;
Reg.RootKey:= bla;
Reg.osv osv.
end;
Du glemmer måske at skrive Reg.Free til sidst. Hvis du ikke gør det er der stadig reserveret hukommelse til objektet. Derfor bruger programmet mere og mere hukommelse.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GED d- s: a--- C++ U? P L+ E? W++ N? o? K- w
O? M? V? PS PE? Y? PGP++ t 5? X+ R tv+ b+ DI? D+
G e-- h! !r y--
------END GEEK CODE BLOCK------
[Redigeret d. 17/08-05 15:47:25 af Jonas (Decko)]
0
Jeg fandt ét objekt (en Memo) som jeg oprettede uden at nedlægge den. Kan umiddelbart se at det har hjulpet lidt, men hukommelsesforbruget stiger stadig - nu er mit spørgsmål så, om denne udvikling er acceptabel:
Klokken 16:00
3.360 KB
Klokken 16:15
3.416 KB
Klokken 16:30
3.516 KB
I forvejen føler jeg, at omkring 3 MB hukommelse er lidt vildt, for et lille program på omkring 400 KB.
Men det er måske meget acceptabelt, når jeg har en timer kørende hvert 5. sekund? Og hvad nu hvis hukommelsesforbruget stiger og stiger?