【发布时间】:2009-09-21 21:15:01
【问题描述】:
我目前正在开发一个非常大型的 Flash 平台游戏(数百个课程),并且正在处理一个问题,即如果您将其打开足够长的时间,游戏就会慢慢停止。我没有编写游戏,所以我只是模糊地熟悉它的内部结构。一些神秘的症状包括,
- 游戏会在一定时间内正常运行(在给定级别上),但突然间它会以指数方式开始泄漏内存。
- 当屏幕上有更多精灵时,游戏达到指数级泄漏所需的时间会更短。
- 即使屏幕上没有任何可见的渲染,游戏也会变慢。
- 随着精灵碰撞的频繁发生,游戏速度变慢。
- 完全禁用碰撞代码确实会减慢降级速度,但不会阻止游戏最终丢帧。
查看源代码并使用 Flex 分析器,我的主要嫌疑人是,
- 游荡对象很多,尤其是
WeakMethodClosure,占用大量内存。 - 该程序极其广泛地使用弱事件侦听器(每帧调度数十个)。
- 每次创建新精灵时都会复制 BitmapData。这些是 50x50 像素的精灵,每秒生成大约 8 个精灵。
我知道在没有看到源头的情况下告诉我问题几乎是不可能的,所以我只是在寻找可以帮助我缩小范围的花絮。有没有人在他们自己的项目中经历过这种回避的性能下降?你的情况是什么原因造成的?
【问题讨论】:
标签: apache-flex actionscript-3 performance memory-leaks