2012-08-29 31 views
0

我是新來的Python,用pygame寫東西,它是非常位圖密集型。以下是關於它的某些(當前)事實:Python 2.7內存管理與pygame

  1. 所有圖形文件都有可能在程序實例中的任何位置重新使用。
  2. 如果我在開始時預加載所有內容,即使沒有重複項,也可能佔用1GB內存。
  3. 當(幾乎)需要加載圖像並不難,即文件大小與內存使用量相比非常小,並且很容易預測接下來會發生什麼。

有很多建議不要使用刪除,我不知道這是否適用於我的情況。我曾考慮過使用垃圾收集機制,通過實現資源管理器來保存對任何加載的圖像的唯一引用,並且通過不同的圖像進行處理,粗略地通過刪除引用來重新加載另一個圖像。但是,我不確定這是否真的能夠在任何時候釋放任何內存,我不知道如何使GC始終如一地保持內存不變,因爲gc調用似乎相當昂貴(並且默認情況下太少)

所以總之,我想知道上述方法是否值得一試,如果不是,我希望有人能教我其他方式,如正確使用del,以及是否適合pygame。任何幫助將不勝感激。

回答

1

試試看,看看它是否夠好。 http://www.pygame.org/wiki/LazyImageLoading?parent=CookBook

當您第一次在ImageController實例中引用一個項目時,它會加載並返回 。儘管圖像中保留了一個參考,但在ImageController中仍然可以使用 。當圖像不再有任何活動引用時,它將從內存中移除,並在下次引用它時重新加載 。

保持您的初始紋理管理器設計儘可能簡單。之後,如果性能分析說你需要更多性能,那麼優化。

+0

嗨,非常感謝!非常抱歉,遲到的回覆,我剛剛放棄了幾天後的等待。 – user1631747