Flex分析 - [enterFrameEvent]在做什么?

Her*_*rms 14 apache-flex profiling enterframeevent

我的任务是找到(并可能修复)一些传递给我们的Flex应用程序的严重性能问题.当应用程序处于空闲状态且不应执行任何操作时,应用程序将始终占用CPU的50%到100%.

我的第一步是运行FlexBuilder附带的分析器.我期望找到一些占用大部分时间的方法,向我展示瓶颈所在.但是,我有意外的事情.

前4种方法是:

  • [enterFrameEvent] - 84%累积,32%自我时间
  • [收获] - 20%累积和自我时间
  • [tincan] - 8%累积和自我时间
  • global.isNaN - 4%累积和自我时间

所有其他方法的累积和自身时间均小于1%.

根据我在网上找到的内容,[括号内的方法]是分析器在没有实际的Flex方法显示时列出的内容.我看到有人声称[tincan]是RTMP请求的处理,我认为[reap]是垃圾收集器.

有谁知道[enterFrameEvent]实际上在做什么?我认为它基本上是事件循环的"主要"功能,因此预计会有很高的累积时间.但为什么自我时间如此之高?究竟发生了什么?我没想到玩家内部会花费这么多时间,特别是因为应用程序中实际上没有发生任何事情(并且没有UI更新).

有没有什么好方法可以找到正在发生的事情?我知道不应该发生的事情(看起来必须有某种忙碌的等待或其他失控的循环),但是探查器并没有给我任何我期待的结果.我的下一步是开始在各个地方添加调试跟踪语句,以尝试跟踪实际发生的情况,但我觉得必须有更好的方法.

sea*_*her 5

有一些事情通常发生在flex项目中的enterframe Handler上.有些事情需要注意

  1. 手动<mycomponent enterFrame ="">事件响应或通过component.addEventListener手动添加的响应(Event.ENTER_FRAME,myfunc)

  2. callLater()调用,这些在框架中发生ALOT并且可以是跳过任何数量的兔子漏洞的副产品,开发人员倾向于使用这些来解决与时间相关的问题,有时坏的代码可能导致这些继续调用每一帧.例如,最新的flex sdk构建中出现了大约120次calllater().

  3. 最后,我不能保证[enterframeEvent]只处理enterframe特定事件回调,而不是定时器,鼠标​​等事件,因为在主事件循环期间发生了enterframe,你可能会看到所有事件触发的累积结果来自主赛事池.我不是说这是发生了什么,但我不能说它也不是什么事情发生,我对那里的内部结构我不太了解.

/如前所述编辑,[enterFrameEvent]在技术上应该在每个帧的开头内部触发,但它不应该做任何事情,除非事件已经显式附加到它以执行用户代码.


Jus*_*ier 1

我认为你的问题出在其他地方。发生这种情况是因为 Flex 构建在 Flash 之上,并且 Flash 触发该事件的频率与帧速率相同(例如每秒 20-30 次)。

http://www.adobe.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary546.html

编辑:我并不是说你的解决方案是降低帧速率。仅当您注意到的事件是问题所在时,这才有效。我不相信这实际上是导致你的速度变慢的原因。可能是调用函数导致了问题......但该事件本身并不是问题。应该会火很多