2011-07-28 7 views
1

필자는 위젯 툴킷으로 GTK +를 사용하여 파이썬에서 작은 애플리케이션을 작성하기 시작했습니다. 최근에 나는 메모리 최적화를하기로 결정하고 생성 한 대부분의 PyGTK 객체가 가비지 컬렉터에 의해 해제되지 않는다는 것을 알게되었습니다. 이 숫자는 창을 열고 나중에 제대로 파괴하더라도 계속 커집니다.Python 및 GTK + : 가비지 컬렉터 친화적 인 객체를 만드는 방법은 무엇입니까?

누군가 파이썬에서 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) 

2+는 GC 목록에 적은 개체를 제공합니다

또한 나는이 같은 창을 만드는 것으로 나타났습니다.

나에게 줄 수있는 조언이 있으십니까?

+0

심각한 버그가 아니라면 조만간 수집 될 것입니다. 순환 참조는 불가능한 (또는 적어도 비실용적 인) 재사용을 유발하여 사용자가 보는 효과를 이끌어 내지만 GUI 툴킷에서는 거의 피할 수없는 것들입니다. – delnan

+0

@delnan 답장을 보내 주셔서 감사합니다. 파이썬 용 GTK +가 GI 기반 일 때 변경 될 예정입니까? – MeanEYE

+0

"GC 목록"이란 무엇입니까? gc.collect()로 얻는 숫자를 의미합니다. len (gc.garbage())가 증가하고 있습니까? – maxy

답변

0

.destroy()를 호출 했습니까?

docu GTK는 참조를 유지하는 최상위 창 목록을 유지합니다.

파이썬 소멸자를 사용하는 경우 순환 참조가 해제되는 것을 방지 할 수 있습니다.

+0

최상위 위젯에서 파괴 (destroy)를 호출하면 더 많은 오브젝트를 비우지 만 생성 된 것과 동일한 수의 오브젝트를 확보 할 수는 없습니다. 예를 들어 창을 만들면 추적 된 객체의 GC 목록에 50 개 정도의 객체가 추가됩니다. 그 창문을 파기하고 나는 20 가지나 다른 것을 풀어 준다. – MeanEYE

관련 문제