我有一个程序,在其中,它创建标签,每次我创建一个内存使用量上升,但当我关闭标签时,内存不会下降。我只是想知道,这是正常的,有什么我可以做的吗?这是关闭标签的代码:
def removeTab(self, index):
text[index].deleteLater()
del text[index] # text box
# reorganize dict
last = -1
for key in sorted(text):
if last+1 != key:
text[key-1] = text[key]
del text[key]
last += 1
self.tab_widget.setCurrentIndex(index)
widget = self.tab_widget.currentWidget()
self.tab_widget.removeTab(index) # remove tab
widget.deleteLater()
del widget
答案 0 :(得分:2)
粗略地说:
python应用程序可用的内存量可能会增长 在它的生命周期中,它永远不会完全缩回到它的位置 启动。
无法强制python将未使用的内存释放回系统。
因此,您可以做的最好的事情是尝试管理内存增长的数量。一种显而易见的方法是删除不需要的对象,以便新创建的对象可以重新使用已经分配的内存。
但是,如果应用程序似乎无法重新使用内存呢?这或者意味着没有干净地删除对象(即,它们被保存在某处),或者更不可能在PyQt / Qt中存在潜在的内存泄漏。
追踪保留给对象的额外引用有时候会非常棘手(至少可以说)。 PyQt中一些常见的“隐藏位置”是使用lambda(或functools.partial)或猴子修补的受保护方法连接的信号。但是找不到它们没有严格的规则。
就目前而言,问题中的示例代码似乎没有任何额外引用可能“隐藏”的地方。因此,如果内存使用量“每次”都会创建一个选项卡(如OP所声明的那样),那么问题必须位于应用程序的其他位置 - 或者更确切地说,问题可能在于对象是如何创建了,而不是删除它们的方式。
答案 1 :(得分:0)
好的,Google Plus上有人提出了建议。
Kevin Kennedy(https://plus.google.com/u/0/105980580368438890195/posts)建议
“。close()之前.deleteLater()”。
答案 2 :(得分:0)
通常,malloc或new分配的内存在释放/删除时不会返回给系统。相反,它由应用程序保留并重新用于以后的分配。如果你需要返回内存,那么你应该看看使用自定义分配器。
答案 3 :(得分:0)
您正在使用python。 “Del”仅删除对象引用,它不释放内存。这是垃圾收集器负责内存释放(而afaik,你无法控制它)。
如果你在其他地方保留对象的引用,也会发生同样的情况。