【发布时间】:2010-09-13 13:42:24
【问题描述】:
我今天在调查一些非常奇怪的事情时遇到了这个话题。在我们的 Flex 应用程序中执行某些操作会导致渲染帧数猛增,从 12fps 到 ~30fps:加载的动画开始高速播放,并且 GUI 开始锁定。
由于我在 Flex/Flash 上阅读的所有内容都强调了“帧速率上限为顶级应用程序中设置的 fps”这一点,因此这些额外渲染发生的唯一方法似乎是由于某些事件导致它们(在任何地方都没有对舞台的帧速率进行任何编程更改)。由于它仅在我将更新逻辑放入 ENTER_FRAME 处理程序时发生,所以我试图找出可能发生的情况,这显然会导致 Flex 疯狂渲染。
假设:我的更新函数中的某些内容正在触发立即屏幕更新,这会立即引发另一个 ENTER_FRAME,这意味着我的更新循环被调用,这会触发另一个立即屏幕更新,...
如果这是一个因素,我们的 GUI 中使用了 Flex 组件。我真的不知道下一步该去哪里。
澄清:
- 当我说事情加速时,有 有两种表现形式。
- 首先,我的 ENTER_FRAME 处理程序得到 调用频率更高。
- 其次,一个 加载带有循环的 Flash SWF 内置动画突然加速 到目前为止,它看起来很傻。
- 我没有使用 updateAfterEvent,我只 研究时发现这个存在 这个问题。显然,有些 Sprite 子类上的事件 自动调用这个,我想知道 如果这是根本原因。
- 我根本没有直接搞乱渲染。背景动画会自动播放,因为它们具有从 CS3 创作中内置的时间线,我们的所有更新功能就是更改 DisPlayObjects 的位置或添加/删除它们等
更新: 我在我的应用程序中添加了一个标签以打印出 stage.frameRate,并在某些时候发现它突然从 12 变为 1000(允许的最大值)。虽然向我的 ENTER_FRAME 处理程序添加一行来重置它是微不足道的,但这几乎没有什么大帮助。 此外,即使这样做,渲染也一团糟。某些操作(例如发出警报弹出窗口)会使它重新焕发生机。 不幸的是,我无法查看 Stage 类的源代码以在 setter 属性上设置断点。
Flex 加载“设置为 1000fps”的事情非常有趣。我们有几个 Flex 应用程序,它们都提供了一个通用接口。主应用程序负责通过 SWFLoader 类根据需要加载这些模块。但是,加载过程已经考虑了延迟加载......当 SWF 加载时,我们然后等待来自 SystemManager 的 APPLICATION_COMPLETE。收到此信息后,不应该完成申请吗?
【问题讨论】:
标签: apache-flex flash actionscript-3 performance profiling