我是Python的新手,用pygame写一些东西,它非常占用位图。以下是关于它的某些(当前)事实:
- 所有图形文件都有可能在程序实例中的任何点重复使用
- 如果我一开始就预加载所有内容,即使没有重复,它也会占用1GB以上的内存
- 当图像(几乎)需要时,加载图像并不困难,即与内存使用量相比,文件大小非常小,而且很容易预测接下来会发生什么
有很多建议不要使用del,我不知道这是否适用于我的情况。我曾考虑过利用垃圾收集机制,通过实现一个资源管理器来保存对任何加载的映像的唯一引用,它可以在不同的映像之间切换,大致是在重新加载另一个映像的同时删除对其中一个的引用。
然而,我不太确定这是否真的在任何时候释放了内存,我也不知道如何让GC始终保持内存,因为GC调用似乎非常昂贵(默认情况下太不频繁)
总之,我想知道上面概述的方法是否值得一试,如果不值得,我希望有人能教我其他方法,比如正确使用del,以及这是否适合pygame。任何帮助都将不胜感激。
试试这个,看看它是否足够好。http://www.pygame.org/wiki/LazyImageLoading?parent=CookBook
当您第一次引用ImageController实例中的项时,它是装载并返回。虽然保留了对图像的引用在ImageController中仍然可用。当图像不再具有任何活动引用,都会从内存中删除,并重新加载下次引用时。
保持最初的纹理管理器设计尽可能简单。之后,如果评测表明您需要更高的性能,则进行优化。