1

目前我正在开发适用于 iOS 和 Android 的 Air 应用程序。Air 3.5 是目标。iPhone 4 / 4s 的性能总体上是可以接受的,经过大量优化:gpu 渲染、StageQuality.LOW、尽可能避免使用向量等。我确实在提升性能方面付出了很多努力。

尽管如此,每隔一段时间,应用程序就会变得非常缓慢。在此之后没有精确的时间点或动作或动作组合。有时,它不会发生几天。但是当它发生时,只有杀死应用程序并再次启动它会有所帮助,因为在那之后应用程序会保持缓慢。因此,我不是在谈论仅在(某些)iPhone 4 和 4s 上出现的小问题。不在 iPad 3,4、iPhone 5、任何 Android 设备上...

有没有人在哪里可以找到解决方案有类似的经验和指示?gpu内存满了怎么办?还是设备内存?这可能涉及吗?

4

2 回答 2

1

请不要期望 Adob​​e Air 具有作为本机应用程序的性能。我也在用 Adob​​e Air 开发应用程序。

根据您的开发经验。我认为这与内存问题有关,因为在乞讨阶段性能并不算太差,但加班时会变得很糟糕(所以你必须杀死应用程序)。我建议您调查内存泄漏问题。

于 2013-01-24T01:21:54.807 回答
0

希望我的经验可以帮到你。

我有一个类似的问题,在游戏过程中的某个时候,帧率会从 30fps 下降到无法恢复的 12fps。起初我以为我的 GPU 内存用完了,它又回到了使用 CPU 进行渲染。

使用 Adob​​e Scout 我发现发生这种情况时,渲染时间高得离谱。

更新到 Air 3.8,我通过限制一次渲染和内存中的位图数量解决了这个问题。我只会为适当的关卡创建新的背景实例,然后在关卡结束时将它们标记为垃圾收集,等待几秒钟然后移动到下一个关卡。

可以解决您的问题的是,如果您一次减少内存中的纹理数量,只显示您需要的纹理。如果要将活动纹理换成新纹理,请将具有该纹理数据的所有对象设置为 null:

testMovieClip = null;

并从中删除所有侦听器,以便垃圾收集器将其拾取。接下来,您可以使用 AIR 强制进行垃圾收集:

System.gc();

在调用 gc 之后实例化你想要渲染几帧的新纹理。使用 Scout 和 iOS 配套应用程序监控资源以确认其正常工作。

您还可以尝试检测帧速率何时下降,并将一些对象设置为 null 然后强制进行垃圾收集。就我而言,如果我通过垃圾收集将游戏移至空帧几秒钟,则帧速率将恢复并且游戏将恢复使用 GPU 进行渲染。

希望这可以帮助!

于 2013-05-27T04:49:53.437 回答