tkinter
グラフィックはturtle
の小さなゲームを作った。 Cracker BarrelのTriangle Peg Gameのシミュレーションです。これは、他の機能の中でも、ゲームの任意のポイントで次の最良の動きをプレイヤーに伝えることができます。ペグはturtle.RawPen
というサブクラスのインスタンスに過ぎず、移動を表す矢印を描画するために平凡なインスタンスRawPen
をたくさん保持します。タートルを完全に削除するには
私はタートルを削除するように見えないので、タートルのウィンドウを殺すためにゲーム(を呼び出す)を再起動すると、そのメモリ消費は実際に増加することに気付きました。私がwindow.clear()
に電話して_turtles
をwindow.__dict__
にクリアしても、まだカメへの参照があります。私はそれらに行うすべての参照が再起動中に削除されることを保証しました。それは問題ではありません。カメを本当に削除してガベージコレクションできる方法はありますか?
は、私はこれをプレイして、あなたは、個々の亀の参照カウントがにドロップするように取得するために、両方の 'window.clear()'そして 'window.byeを()'呼び出す必要があります結論づけゼロ。 '.clear()'は 'window._turtles'を処理し、' .bye() 'は' onclick() 'のようなタートルイベントメソッドによって引き起こされる余分な参照を処理します。あなたの追加の参照がどこから来ているのかは言えません。 – cdlane
私は使用しているすべてのカメ( 'peg_dir'、' graveyard'、 'artist_dir')にデバッグ中に' gc.get_referrers() 'を使いました。唯一の参照は' window._turtles'を含むリストでした。イベントメソッド。 'window.clear()'と 'window.bye()'を使ってすべてのリストをクリアしようとしました。 'gc.collect()'は 'peg_dir'のオブジェクトに到達できないと言っています。理由は分かりません。私はそれを調べます。 –