2010-02-10 4 views
20

J'ai cherché à effacer un tableau dans ActionScript 3.As3 - Comment effacer un tableau efficacement?

Certains suggèrent méthode: (fuite de mémoire) array = [];

Autre dirait: array.splice(0);

Si vous avez d'autres, s'il vous plaît partager . Lequel est le plus efficace?

Merci.

+0

Fuite de mémoire? Collecte des ordures! – n4pgamer

Répondre

29

array.length = 0 ou array.splice() semble fonctionner le mieux pour la performance globale.

array.splice(0); effectuera plus rapidement que array.splice(array.length - 1, 1);

+1

Je sais que c'est un vieux sujet, mais que diriez-vous de définir un tableau à null? – drpelz

+5

En fait 'array = null;' se débarrasse du tableau lui-même au lieu de simplement le nettoyer. C'est fondamentalement la même chose qui se passe quand vous 'array = [];', la référence du tableau précédent est perdue et sera probablement récupérée (ce qui pourrait ne pas être le résultat recherché). – Biro456

+1

Pourquoi ne pas 'array = new Array()'? –

2

Je me demande, pourquoi vous voulez effacer le tableau de cette manière? effacer toutes les références à ce même tableau le rendra disponible pour la récupération de place. array = [] le fera, si array est la seule référence à la array. si ce n'est pas le cas, vous ne devriez peut-être pas l'utiliser (?)

également, veuillez noter que `les tableaux acceptent les chaînes comme des clés. Les deux épissures et longueur fonctionnent uniquement sur des clés entières, elles n'auront donc aucun effet sur les clés de type String.

BTW .: array.splice(array.length - 1, 1); est équivalent à array.pop();

+0

Je veux le rendre disponible à la collecte des ordures, je veux le vider. – ALOToverflow

+0

Assez sûr tableaux dans AS3 n'acceptent pas les chaînes en tant que clés. Les objets le font, mais pas les tableaux. –

+0

@ Omnomlets: vous avez tort. la prochaine fois, essayez de vérifier vos déclarations. – back2dos

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

cela a toujours fonctionné assez bien pour moi, mais je n'ai pas eu la chance de courir à travers le profileur encore

2

Il y a une clé différence entre array.pop() et array.splice (array.length - 1, 1) qui est que pop retournera la valeur de l'élément. C'est idéal pour liners un à portée de main lors de déblayer un tableau comme:

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

Pour tableau avec 100 éléments (points de repère en ms, plus le moins de temps nécessaire):

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