它可能是绑定(bind) (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
。
谢谢
最佳答案
我有这个 - 在某个地方你有一个对你的小部件的引用,并且该引用已被计算在内......删除该小部件的唯一方法是确保没有剩余的引用,以便 python 可以对其进行垃圾收集。
至少你不会像 C++ 那样以悬空引用结束,这可能会导致一些严重的崩溃......
这实际上很有用——如果你创建一个类,它有一个类级别的成员列表,你可以回收旧对象,永远不会让它们被垃圾回收
关于python - 内存未释放 - PyQt4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341954/