2010-02-10 11 views
20

que he estado buscando para borrar una matriz en ActionScript 3.As3 - ¿Cómo borrar una matriz de manera eficiente?

Algunos sugieren método: (? Pérdida de memoria) array = [];

Otro diría: array.splice(0);

Si tiene cualquier otra, por favor compartir . ¿Cuál es el más eficiente?

Gracias.

+0

pérdida de memoria? ¡Recolección de basura! – n4pgamer

Respuesta

29

array.length = 0 o array.splice() parece funcionar mejor para el rendimiento general.

array.splice(0); realizará más rápido que array.splice(array.length - 1, 1);

+1

Sé que este es un tema antiguo, pero ¿qué hay de establecer una matriz a nulo? – drpelz

+5

En realidad 'array = null;' se deshace de la matriz misma en lugar de simplemente limpiarla. Es básicamente lo mismo que ocurre cuando 'array = [];', la referencia de la matriz anterior se pierde y probablemente será basura (lo que podría no ser el resultado deseado). – Biro456

+1

¿Por qué no 'array = new Array()'? –

2

Me pregunto, ¿por qué desea borrar la matriz de esa manera? borrar todas las referencias a esa misma matriz lo hará disponible para la recolección de basura. array = [] lo hará, si array es la única referencia al array. si no lo está, entonces tal vez no debería estar emtpying (?)

también, tenga en cuenta que'Aerrays aceptan cadenas como claves. tanto el empalme como la duración operan únicamente en claves enteras, por lo que no tendrán efecto en las claves de cadena.

BTW .: array.splice(array.length - 1, 1); es equivalente a array.pop();

+0

Quiero hacer que esté disponible para la recolección de basura, quiero vaciarlo. – ALOToverflow

+0

Bastante seguro matrices en AS3 no aceptan cadenas como claves. Los objetos sí, pero no Arrays. –

+0

@Omnomlets: estás equivocado. la próxima vez, intente verificar sus declaraciones. – back2dos

1
array.splice(0,array.length); 

esto siempre ha funcionado bastante bien para mí, pero no he tenido la oportunidad de correr a través del generador de perfiles todavía

2

Hay una llave diferencia entre array.pop() y array.splice (array.length - 1, 1) que es que pop devolverá el valor del elemento. Esto es ideal para revestimientos de uno a mano cuando la limpieza de una matriz como:

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

Para matriz con 100 elementos (puntos de referencia en ms, menor es la menos tiempo necesario):

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