我开始用Python编写一个小应用程序,用GTK +作为我的widget工具包。最近我决定做一些内存优化,并注意到我创建的大多数PyGTK对象永远不会被垃圾收集器释放。即使我打开一扇窗户并在之后正确销毁它,这个数字也会不断增长。
有人能指出我如何从Python创建和处理GTK +对象的正确方向。我没有使用Glade或类似的东西。
另外我注意到创建这样的窗口:
class SomeWindow:
def __init__(self):
self.window = gtk.Window(type=gtk.WINDOW_TOPLEVEL)
而不是:
class SomeWindow(gtk.Window):
def __init__(self):
super(SomeWindow, self).__init__(type=gtk.WINDOW_TOPLEVEL)
在GC列表中减少2个以上的对象。
你可以给我任何建议吗?
答案 0 :(得分:0)
你有没有打电话给.destroy()?
根据gtk.Widget.destroy文件,GTK维护了一个顶级窗口列表,可以保持引用活动。
如果你使用任何Python析构函数,它们也可以防止循环引用被释放。