它可能是绑定(SIP)甚至python,但我有Qt(pyqt4)的问题。
我有一个QTabWidget,在里面我放了一个可以关闭的小部件。
我有一个小部件,可以分配大约400mb的内存。我没有设置父级,我在关闭时调用deleteLater()
但没有任何反应。即使调用python的gc也行不通:
import gc gc.collect()
现在,在不使用deleteLater()
的情况下从QTabWidget关闭小部件时,会分配越来越多的内存。所以假设我打开内存繁重小部件的4个选项卡,我使用大约1.6GB的内存。如果我关闭它们并打开一个新的,我现在可以使用2GB的内存。
如果我使用deleteLater()
,关闭4个标签后,我不会打开2GB,然后我必须打开5个标签。但是,这里是问题,即使所有小部件都已关闭,仍然会为进程(python)分配1.6GB,并且已调用deleteLater
。
由于
答案 0 :(得分:3)
我有这个 - 在某个地方你有一个对你的小部件的引用,并且该引用已被计算...删除该小部件的唯一方法是确保没有剩余的引用,因此python可以垃圾收集它。
至少你最终没有像C ++这样悬挂的引用,这可能导致一些令人讨厌的崩溃......
这实际上很有用 - 如果您创建一个具有其成员的类级别列表的类,您可以回收旧对象并且永远不会将它们垃圾回收