0

私はPythonを初めて使用し、pygameで何かを書いていますが、ビットマップを多用します。これに関する特定の(現在の)事実は次のとおりです。

  1. すべてのグラフィックファイルは、プログラムインスタンスの任意の時点で再利用される可能性があります。
  2. 重複がない場合でも、最初にすべてをプリロードすると、1GB以上のメモリを消費する可能性があります。
  3. (ほぼ)必要なときに画像をロードすることは難しくありません。つまり、ファイルサイズはメモリ使用量に比べて非常に小さく、次に何が起こるかを簡単に予測できます。

delを使用しないという提案はたくさんありますが、それが私の場合に当てはまるかどうかはわかりません。ガベージコレクションメカニズムを利用することを考えました。ロードされた画像への唯一の参照を保持するリソースマネージャーを実装し、一方の参照を削除してもう一方の画像を再読み込みすることで、さまざまな画像を操作します。

ただし、これによってメモリが実際に解放されるかどうかはよくわかりません。また、gc呼び出しは非常に高価であるように思われるため、GCが実際にメモリを一貫して維持する方法がわかりません(デフォルトでは頻度が低すぎます)。 )。

要約すると、上記の方法が試してみる価値があるかどうかを知りたいのですが、そうでない場合は、delを適切に使用するなど、他の方法を教えてもらえるといいのですが、それがpygameに適しているかどうかを確認します。どんな助けでもありがたいです。

4

1 に答える 1

1

これを試して、十分かどうかを確認してください。http://www.pygame.org/wiki/LazyImageLoading?parent=CookBook

ImageControllerインスタンスで最初にアイテムを参照すると、アイテムがロードされて返されます。画像への参照は保持されますが、ImageControllerで引き続き使用できます。イメージにアクティブな参照がなくなると、イメージはメモリから削除され、次に参照されるときに再ロードされます。

最初のテクスチャマネージャのデザインはできるだけシンプルにしてください。その後、プロファイリングでより高いパフォーマンスが必要であると示された場合は、最適化します。

于 2012-09-04T02:35:40.003 に答える