actionscript-3 - 如果不调用 clearTimeout(), flash.utils.setTimeout() 是否会泄漏内存?

标签 actionscript-3 flash

ActionScript 3 documentation for flash.utils.setTimeout claim :

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 Activity Monitor)来监控 Flash 的内存使用情况。
function Main():void {
    setInterval(tick, 10);
    setInterval(display, 500);
}

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

内存使用量会短暂上升,但随着垃圾收集器的介入而回落。平均内存使用量在几分钟内保持稳定。

当我修改代码以保持对每个闭包的显式引用时,内存使用量在几分钟内上升到许多 GB。文档已过时。 Flash 不会保留对传递给 setTimeout 的闭包的引用。 . (至少在 OS X 上;我认为在 Windows 上也是一样的。)

1 我创建了一个数组作为静态类 var 和 push各编辑 f在调用之前先了解一下 setTimeout .

关于actionscript-3 - 如果不调用 clearTimeout(), flash.utils.setTimeout() 是否会泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16489536/

相关文章:

flash - 如何获得透明度以在 Actionscript 中处理位图

c - 从 C 返回的 ByteArray 格式无效

apache-flex - 检测用户何时离开 Flex 中的页面/浏览器

arrays - AS3从字母表数组中获取随机唯一字符

flash - 在带有矢量的 Flash Player 10 中,为什么还要使用数组?

Flash 文档查看器

Flash/ActionScript 3 : Load . FLV 文件转换为 MovieClip 并开始播放该 FLV 文件

actionscript-3 - 通过静态类型 GetColor 的引用调用可能未定义的方法dispatchEvent

php - 无法使用 Flash 应用程序更新 PHP 数据库

javascript - AS3 - 获取流连接ip