我目前正在开发一款非常庞大的Flash平台游戏(数百个类),面临一个问题:如果长时间运行游戏,则游戏会逐渐变慢。由于我没有编写游戏,因此我对其内部只有一些模糊的了解。其中一些神秘的症状包括:
- 游戏在给定的关卡上运行良好一段时间后,突然开始呈指数级泄漏内存。
- 当屏幕上有更多精灵时,游戏达到指数级泄漏的时间会更短。
- 即使屏幕上没有可见的渲染物,游戏也会变慢。
- 精灵碰撞越频繁,游戏速度下降得就越快。
- 完全禁用碰撞代码确实减缓了性能下降的速度,但无法阻止游戏最终掉帧。
查看源代码并使用Flex分析器,我的主要嫌疑对象是:
- 存在许多游离对象,特别是
WeakMethodClosure
,占用了大量内存。 - 程序极度广泛地使用弱事件侦听器(每帧分派数十个)。
- 每次创建新精灵时都会复制
BitmapData
。这些是50x50像素的精灵,每秒产生约8个。
我知道没有看到源代码几乎不可能告诉我问题所在,因此我只是寻找可能有助于我缩小范围的细节。是否有人在自己的项目中遇到了这种难以捉摸的性能下降?你的情况是什么原因导致的呢?