2011-07-28 3 views
1

私はウィジェットツールキットとしてGTK +でPythonで小さなアプリケーションを作成し始めました。最近、私はいくつかのメモリ最適化を行うことにして、私が作成するPyGTKオブジェクトのほとんどがガベージコレクタによって解放されることはないことに気付きました。この数字は、窓を開けてもその後も適切に破棄しても増え続けます。PythonとGTK +:ガベージコレクタフレンドリオブジェクトを作成するには?

誰かが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) 

2+は、GCのリストではあまりオブジェクト与えます

はまた、私はこのようなウィンドウを作成することに気づきました。

私に与えることができるアドバイスはありますか?

+0

重大なバグでない限り、遅かれ早かれ*収集されます*。巡回参照は不可能です(少なくとも、非実用的です)。結果はGUIツールキットでは避けられません。 – delnan

+0

@delnan回答ありがとう、これはPythonのGTK +がGIベースのときに変更されますか? – MeanEYE

+0

「GCリスト」とはどういう意味ですか?あなたはgc.collect()で得る数字を意味します。 print len(gc.garbage())が増加していますか? – maxy

答えて

0

あなたは.destroy()を呼び出しましたか?

gtk.Widget.destroyによると、docu GTKは、参照を生かしておくトップレベルウィンドウのリストを保持しています。

Pythonデストラクタを使用する場合は、循環参照が解放されないようにすることもできます。

+0

トップレベルのウィジェットで破棄を呼び出すと、私はより多くのオブジェクトを解放しますが、まだ作成されているウィジェットの数は同じではありません。たとえば、ウィンドウを作成すると、追跡オブジェクトのGCリストに50程度のオブジェクトが追加されます。その窓を壊して私は20何かを解放する。 – MeanEYE

関連する問題