[PyQt] PyQt4 memory leak
David Aguilar
davvid at gmail.com
Fri Aug 9 11:08:56 BST 2013
On Wed, Jul 31, 2013 at 9:46 PM, David Aguilar <davvid at gmail.com> wrote:
> On Fri, Jul 19, 2013 at 3:06 AM, Phil Thompson
> <phil at riverbankcomputing.com> wrote:
>> On Mon, 15 Jul 2013 22:27:45 -0700, David Aguilar <davvid at gmail.com>
>> wrote:
>>> Matti Aarnio reported a memory leak in git-cola that I traced back to
>>> PyQt4.
>>>
>>> I've attached a minimal reproducer.
>>>
>>> I've tested this on Mac OS X and Debian/testing with PyQt4 4.9.x.
>>>
>>> Matti's tried it on x86_64 Fedora 18, we see the same behavior there.
>>>
>>> Everytime we hit the "Refresh" button more memory is consumed and
>>> never returned.
>>>
>>> Is there anything we can do differently to allow the widgets to get
>>> cleaned up?
>>>
>>> The add_items() call uses treewidget.takeItems() to make the old items
>>> go away, and then adds new items. The old items do not seem to be
>>> getting cleaned up.
>>
>> It's a SIP code generation bug - fix in tonight's snapshot.
>>
>> A workaround may be to remove the items individually...
>>
>> while root.takeChild(0) is not None:
>> pass
BTW Qt is really slow when removing from the front of the array.
I ended up doing this instead:
count = root.childCount()
while count > 0:
root.takeChild(count-1)
count = root.childCount()
The performance profile suggests that Qt shifts subsequent items when
takeChild(0) is used, so taking from the end is fastest.
Thanks,
--
David
More information about the PyQt
mailing list