【问题标题】:As3 - How to clear an array efficiently?As3 - 如何有效地清除数组?
【发布时间】:2011-01-15 07:27:13
【问题描述】:

我一直希望在 ActionScript 3 中清除一个数组。

一些方法建议:array = [];(内存泄漏?)

其他人会说:array.splice(0);

如果你有其他的,请分享。 哪个效率更高?

谢谢。

【问题讨论】:

  • 内存泄漏?垃圾收集!

标签: actionscript-3 apache-flex flex3


【解决方案1】:

我想知道,你为什么要以这种方式清除阵列?清除对该数组的所有引用将使其可用于垃圾收集。 array = [] 会这样做,如果 array 是对 array 的唯一引用。如果不是,那么您可能不应该清空它(?)

另外,请注意`数组接受字符串作为键。 splice 和 lenght 都只对整数键进行操作,因此它们对字符串键没有影响。

顺便说一句:array.splice(array.length - 1, 1); 等价于 array.pop();

【讨论】:

  • 我确实想让它可用于垃圾回收,我想清空它。
  • 相当肯定 AS3 中的数组不接受字符串作为键。对象可以,但数组不行。
  • @Omnomlets:你错了。下次,请尝试验证您的陈述。
  • 你是对的。我想那是因为 Array 首先扩展了 Object 。谢谢!你每天都会学到一些东西。
【解决方案2】:

对于 100 个元素的数组(以毫秒为单位的基准,所需时间越少):

// best performance (benchmark: 1157)
array.length = 0;
// lower performance (benchmark: 1554)
array = [];
// even lower performance (benchmark: 3592)
array.splice(0);

【讨论】:

    【解决方案3】:

    array.pop() 和 array.splice(array.length - 1, 1) 之间有一个关键区别,即 pop 将返回元素的值。这对于清除数组时非常方便,例如:

    while(myArray.length > 0){
         view.removeChild(myArray.pop());
    }
    

    【讨论】:

      【解决方案4】:
      array.splice(0,array.length);
      

      这对我来说一直很有效,但我还没有机会通过分析器运行它

      【讨论】:

        【解决方案5】:

        array.length = 0array.splice() 似乎最适合整体性能。

        array.splice(0); 的执行速度将比 array.splice(array.length - 1, 1); 快​​

        【讨论】:

        • 我知道这是一个老话题,但是将数组设置为 null 怎么样?
        • 实际上array = null; 摆脱了阵列本身,而不是仅仅清理它。它与array = []; 时发生的情况基本相同,先前的数组引用丢失并且可能会被垃圾收集(这可能不是想要的结果)。
        • 为什么不array = new Array()
        猜你喜欢
        • 2011-11-14
        • 2013-10-03
        • 2013-10-26
        • 2017-03-05
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        相关资源
        最近更新 更多