我的第一步是运行FlexBuilder附带的分析器.我预计会找到一些占用大部分时间的方法,告诉我瓶颈在哪里.但是,我有一些意想不到的事情.
前四种方法是:
> [enterFrameEvent] – 累积84%,自我时间32%
> [收获] – 20%累积和自我时间
> [tincan] – 8%的累积和自我时间
> global.isNaN – 累积和自我时间的4%
所有其他方法对于累积和自身时间都不到1%.
从我在网上找到的,[括号中的方法]是当它没有实际的Flex方法来显示时,分析器列出的是什么.我看到有人声称[tincan]是RTMP请求的处理,我认为[收获]是垃圾收集器.
有没有人知道[enterFrameEvent]实际上在做什么?我认为它本质上是事件循环的“主要”功能,因此预计有高的累积时间.但为什么自我时间如此之高?实际发生了什么?我没想到玩家内部会占用这么多时间,特别是因为应用程序中没有发生任何事情(并且没有UI更新).
有什么好的方法来找出发生的事情吗?我知道一些事情不应该是(看起来肯定有某种忙碌的等待或其他失控的循环),但是分析器没有给我任何我期待的结果.我的下一步将是开始在各种地方添加调试跟踪语句来尝试跟踪实际发生的情况,但我觉得必须有更好的方法.
解决方法
>手动mycomponent enterFrame =“”>事件响应或通过component.addEventListener(Event.ENTER_FRAME,myfunc)手动添加的事件响应
> callLater()调用,这些在框架中发生ALOT,并且可以跳过任何数量的兔子洞的副产品,开发人员倾向于使用这些很多时间来解决时序相关的问题,有时坏代码可能会导致这些继续调用每个帧.例如,最新的flex sdk构建中有〜120次的calllater()发生.
>最后,我不能保证[enterframeEvent]仅处理特定于框架的事件回调,而不是定时器,鼠标等事件,因为在主事件循环期间会出现enterframes,所以您可能会看到所有事件的累积结果从主赛事池开枪.我不是说这是发生了什么,但我不能说这不是发生了什么,我不知道内部的那些确定.
/ edit也如前所述,[enterFrameEvent]在技术上应该在每个帧开始时内部触发,但是除非已经明确地附加事件以执行用户代码,否则它不应该执行任何操作.