加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – 如果没有调用clearTimeout(),flash.utils.set

发布时间:2020-12-15 07:24:19 所属栏目:百科 来源:网络整理
导读:ActionScript 3 documentation for flash.utils.setTimeout 声称: If you do not call the clearTimeout() function to cancel the setTimeout() call,the object containing the set timeout closure function will not be garbage collected. 这听起来很
ActionScript 3 documentation for flash.utils.setTimeout声称:

If you do not call the clearTimeout() function to cancel the setTimeout()call,the object containing the set timeout closure function will not be garbage collected.

这听起来很荒谬.没有理由它应该持有一个它永远不会再调用的函数/闭包的引用,以及the equivalent JavaScript functions do not leak memory.

这是真的?

解决方法

至少在当前版本的Flash中,情况并非如此.

我创建了一个函数,它创建一个大字符串,创建一个引用它的闭包,然后用闭包调用setTimeout.

public function tick():void {
    var data:String = "helloworld";
    for (var j = 0; j < 20; j++) {
        data += data;
    }

    var f = function() {
        var i = 0;
        if (data.length > 0) {
            i++;
        }
    };

    setTimeout(f,0);
}

我经常运行此函数,并使用System.totalMemory(以及OS X活动监视器)来监视Flash的内存使用情况.

function Main():void {
    setInterval(tick,10);
    setInterval(display,500);
}

public function display():void {
    trace("Memory usage: " + System.totalMemory + "B.");
}

内存使用量会短暂上升,但随着垃圾收集器的进入,内存使用率会下降.平均内存使用量在几分钟内保持稳定.

当我修改代码以保持对每个closure1的显式引用时,内存使用量在几分钟内就会增加到几千兆字节.文档已过时. Flash不会保留对传递给setTimeout的闭包的引用. (至少在OS X上;我认为它在Windows上是相同的.)

1我创建了一个Array作为静态类var,并在调用setTimeout之前将每个f推到它上面.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读