On dom, 2009-08-02 at 02:12 +0200, Albert Cervera i Areny wrote: > I've been having problems with my application consuming too much memory after > some time running and today decided to take a deeper look. I've ended up with > the attach test.py script which either demonstrates PyQt is not freeing > memory > appropiately when signals are involved or I simply don't understand how this > works. > > As you can see the script creates lists with 100.000 QObjects and prints the > memory used. As python won't free memory but reuse what has already been > freed > I expect a call like: > > list = [] > fill in the list with lots of data > > to take as much memory as: > > list = [] > fill in the list with lots of data > list = [] > fill in the list with the same lots of data > > If you give it a try, you'll realize that this is true if you create 100.000 > objects with no signal connections. But if you connect and disconnect a > signal for those objects, the memory used after the second fill is larger > than > after the first one. > > It seems to me that some data is being leaked in connect() and disconnect() > functions (which, by the way, take up a lot of memory). > > Here's the output of the script in my system: > > $ python test.py one no > Executing 'one' without signals > Memory: 21564 > > $ python test.py one yes > Executing 'one' with signals > Memory: 64992 > > $ python test.py two yes > Executing 'two' with signals > Memory: 125592 > > $ python test.py two+remove yes > Executing 'two+remove' with signals > Memory: 93880 > > $ python test.py three+remove yes > Executing 'three+remove' with signals > Memory: 122808 > > So "two+remove yes" should be using 64992 Kb (just like "one yes") but it > uses > 50% more. The same happens with "three+remove yes", again more 30 Mb!
Looks like a genuine memory leak to me. I tried stuffing gc.collect() in there (after you free the object list) but, as expected, it does not make a difference. -- Giovanni Bajo Develer S.r.l. http://www.develer.com _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
