我有一个Flex应用程序。令人惊讶的是,当我的笔记本电脑上运行时,它可以使我的CPU保持在~50%负载(在40%和60%之间波动)。笔记本电脑是4年前的戴尔型号 - CPU是英特尔T1350 @ 1.86GH。奇怪的是,即使它没有做任何事情,应用程序仍将我的CPU保持在50%。它是一个静态的,相当复杂的Flex屏幕。我没有运行效果,没有服务器通信,没有动画。当然它有效果和类似的动态行为,但在这个测试中我不碰它。我只是加载它并保持静态,但CPU仍然是50%。 当然我描述了应用程序,但它没有给我很多有用的信息。我甚至在浏览器被另一个窗口隐藏时仍然分析了应用程序(仍然是CPU很高),花费的大部分时间都在这三个项目中:Timer.tick - 54.5%,[enterFrameEvent] - 21.5%和[reap] - 12.5%。所有这些都是自我时代,即在这三者中没有引用的其他方法。
任何可能导致如此高CPU利用率的想法都非常受欢迎。 ...或者如何确定根本原因。
其他信息: 当我的开发机器(CPU Intel Core 2 Quad Q6600 @ 2.4 GH)上运行相同的应用程序时,当然利用率下降到16%,因为CPU速度要快几倍,但静态屏幕和这个快速CPU仍然太多了。此外,如果我用IE运行它(上面的所有数字都是FF),那么CPU利用率接近0%。我想ActiveX Flash播放器版本设法通过将工作委托给GPU(我的视频卡)来卸载CPU,但这仅适用于IE +好视频卡的情况,这不是我可以为大多数用户做出的假设
我还注意到将FPS提高到60(上面的数字是默认的24 fps),这并没有真正改变CPU负载。将FPS降低到12会降低CPU负载,但不会成比例,这不能解决这个问题。
我倾向于认为问题与我所拥有的UI层次结构有关。对于flash播放器来说可能过于复杂和/或嵌套,但为什么在屏幕完全静止时应该占用CPU时间。
需要帮助。
谢谢!
答案 0 :(得分:0)
一些想法。
但是,我不明白为什么上述(1)或(3)与FPS有关。你在画什么?
答案 1 :(得分:0)
我浏览了你的问题并看到你提到了Timer类。如果你在应用程序运行的整个过程中使用计时器,那就太酷了。
但是,很有可能你没有在一个计时器上删除事件,并且(在一个刚才的情况下)在你完成使用后没有设置timer = null。根据您使用计时器对象的方式,您还可以循环并重复创建新的计时器实例。结合没有调用removeEventListener,大量的计时器实例可能永远不会被垃圾收集。
我发现了一个潜在的问题。 祝你好运。