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 回答