【发布时间】:2013-09-24 19:41:58
【问题描述】:
我创建了一个非常简单的 SWF 来演示:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.external.ExternalInterface;
public class FlashIELeak extends MovieClip {
public function FlashIELeak() {
addEventListener(Event.ENTER_FRAME, onFrame);
}
private function onFrame(e:Event):void {
ExternalInterface.call("test", null);
}
}
}
在 Chrome 中加载,没问题。内存或多或少是固定的。
在 IE 中加载它,内存不断增加 - 大约 30k/s。你甚至不需要声明一个测试函数。只需将 swf 嵌入页面中,您就有了泄漏。在我们的项目中,我们传递了一个具有多个属性的对象,而 IE 的泄漏速度为 120k/s。不好。
有人见过这个吗?我找不到与此相关的任何其他帖子。
【问题讨论】:
-
不错!最后会崩溃吗?
-
如果你让它运行足够长的时间是的。我们有客户抱怨 IE 崩溃,我们将其范围缩小到这个问题。
-
如果您不使用
ExternalInterface.call()(在您的输入帧处理程序中),IE 内存中的一切都好吗?您还可以指定您在哪个版本的 IE、Flash 和 Windows 操作系统中看到此问题。最后,我会尝试调低一些(进入帧事件经常发生)。如果您将ExternalInterface.call()与触发的Timer一起使用会发生什么情况,比如每10 秒一次。我猜这个问题只是发生得更慢...... -
尝试每 10 秒触发一次,而不是使用 setInterval 并仍然得到泄漏。它每 10 秒上升约 6k。
-
其实并没有那么一致。有时它会跳大约 80k,然后在一分钟后恢复到原来的水平。然而,随着时间的推移,它似乎确实增加了。不过很难说,因为它太慢了。我让它运行一段时间,看看会发生什么。
标签: flash internet-explorer memory-leaks externalinterface