【发布时间】:2011-01-15 07:27:13
【问题描述】:
我一直希望在 ActionScript 3 中清除一个数组。
一些方法建议:array = [];(内存泄漏?)
其他人会说:array.splice(0);
如果你有其他的,请分享。 哪个效率更高?
谢谢。
【问题讨论】:
-
内存泄漏?垃圾收集!
标签: actionscript-3 apache-flex flex3
我一直希望在 ActionScript 3 中清除一个数组。
一些方法建议:array = [];(内存泄漏?)
其他人会说:array.splice(0);
如果你有其他的,请分享。 哪个效率更高?
谢谢。
【问题讨论】:
标签: actionscript-3 apache-flex flex3
我想知道,你为什么要以这种方式清除阵列?清除对该数组的所有引用将使其可用于垃圾收集。 array = [] 会这样做,如果 array 是对 array 的唯一引用。如果不是,那么您可能不应该清空它(?)
另外,请注意`数组接受字符串作为键。 splice 和 lenght 都只对整数键进行操作,因此它们对字符串键没有影响。
顺便说一句:array.splice(array.length - 1, 1); 等价于 array.pop();
【讨论】:
对于 100 个元素的数组(以毫秒为单位的基准,所需时间越少):
// best performance (benchmark: 1157)
array.length = 0;
// lower performance (benchmark: 1554)
array = [];
// even lower performance (benchmark: 3592)
array.splice(0);
【讨论】:
array.pop() 和 array.splice(array.length - 1, 1) 之间有一个关键区别,即 pop 将返回元素的值。这对于清除数组时非常方便,例如:
while(myArray.length > 0){
view.removeChild(myArray.pop());
}
【讨论】:
array.splice(0,array.length);
这对我来说一直很有效,但我还没有机会通过分析器运行它
【讨论】:
array.length = 0 或 array.splice() 似乎最适合整体性能。
array.splice(0); 的执行速度将比 array.splice(array.length - 1, 1); 快
【讨论】:
array = null; 摆脱了阵列本身,而不是仅仅清理它。它与array = []; 时发生的情况基本相同,先前的数组引用丢失并且可能会被垃圾收集(这可能不是想要的结果)。
array = new Array()?