[Gambas-user] Runaway memory consumption not released until program exit
Richard
richard.j.walker at ...247...
Fri May 7 19:02:52 CEST 2010
Hi everybody,
I am using Gambas 2.20.0 on Mandriva 2010.0. The desktop is LXDE and the gui
toolkit might possibly be GTK.
I have written a button event handler to process hundreds or thousands of .png
images in a directory. The main memory available when the program starts is
around 1.8 GBytes. After processing just 744 images (in testing) this falls
to about 74 MBytes. The memory is not freed on exit from the event handler,
only when I exit from the program.
I use only 1 Image object; a variable called "frame". I have tried declaring
this as a local in the event handler and as a class-visible variable with no
apparent change in the way memory is eaten and never disgorged.
I do three things with my frame variable in a loop which iterates for all
frames in a directory;
1. I load it from an image on disc
2. I "stretch" it to make its width smaller(!)
3. I save the altered frame to a different directory
Specifically the significant lines of code look like;
frame = Image.Load(SourceImage)
frame.Stretch(NewWidth, NewHeight)
frame.Save(DestinationImage)
Outside the loop I now do frame = NULL, but this has no effect.
Is it possible that my code is allocating multiple "anonymous" frame objects
and not releasing them? I have read Benoit's explanation in this list of
Gambas memory management (Re: [Gambas-user] Memory Management, on
08/09/2007 09:19).
I turned to Gambas to program this function because my first choice,
imagemagick, would always run out of memory without processing a single
frame. The Gambas solution works, but no more work can be done without
killing the program and restarting it - not very convenient. I anticipate
that typical uses of the program will have to handle 10-30 thousand png
images at a time.
Can anyone suggest how I find out what is so hungry for my memory, and
hopefully how to suppress its appetite?
Richard
More information about the User
mailing list