我们的Flash游戏每天运行近4000名用户,大约2%的用户获得脚本停止(错误#1502和#1503上的Flash异常)。我们知道这些错误正在发生,因为我们使用Flash Player 10 uncaughtErrorEvents功能捕获并记录这些异常。
我们还记录了函数调用历史记录,因此我们可以看到异常似乎总是发生在ActionScript3代码中的不同位置,但当然通常是代码中运行最频繁的部分。
我99%确定我们的代码没有陷入无限循环,我知道这个错误最初是为了什么。
我怀疑发生的事情是用户在一台非常慢的机器上运行,并且闪存正在进行垃圾收集或其他事情,这导致了停顿。然后,Flash检测到代码的长时间执行并中止,因为它超出了Flash发布设置中设置的脚本时间限制。我们目前已将此设置设置为20秒,这应该足以让我们的代码在一台不错的机器上运行。
还有其他人遇到类似的问题吗?使用了哪些解决方案,而不是将脚本时间限制设置为一些巨大的数字,我们可能只需要这样做?
答案 0 :(得分:2)
这听起来像是一个页面文件挂起或慢速计算机随机崩溃而无法解决。
您的Flash包含在浏览器中。哪个存储在内存中。 现在,当用户需要更多内存时,他们就会说 - 内存的数据存储在硬盘驱动器的一部分上,作为“页面文件”中的“虚拟内存”,允许他们运行尽可能多的应用程序一次。
这一切都很好,但这意味着如果您的Flash正在使用的线程,无论出于何种原因部分移动,或者整个移动到虚拟内存,那么每次更新都必须轮询硬盘驱动器以进行内存访问。
与实际RAM(随机存取存储器)相比,硬盘驱动器速度慢,速度慢,并且因为优先级较慢,所以始终。因为它无法更新,直到它可以从硬盘读取,它就会挂起。由于flash知道如果在一段时间内没有调用更新(通常是在脚本卡在循环中时),它会抛出您收到的错误。
我看到的最大的错误导致了这种事情,就是当存在内存泄漏时。通常以'思想被删除,垃圾收集对象'的形式出现。尝试在调试运行中分析内存并播放几个小时,检查内存负载是否在增加,因为你反复做同样的事情。密切关注数组大小,查找从屏幕上删除但从未删除(因此保留在内存中)的影片剪辑等内容。写得不好的菜单经常遭遇这种困境。
陷入困境的计算机也总是有可能根本无法跟上每帧处理,而像防病毒这样的东西会启动系统扫描(占用内存),这会更真实地适应您的零星数据