2010-02-10 5 views
20

Ho cercato di cancellare un array in ActionScript 3.As3 - Come cancellare un array in modo efficiente?

Alcuni metodo suggerisce: (? Perdita di memoria) array = [];

Altri direbbero: array.splice(0);

Se avete qualsiasi altro, si prega di condividere . Qual è il più efficiente?

Grazie.

+0

Perdita di memoria? Raccolta dei rifiuti! – n4pgamer

risposta

29

array.length = 0 o array.splice() sembra funzionare meglio per le prestazioni generali.

array.splice(0); si esibirà più veloce di array.splice(array.length - 1, 1);

+1

So che questo è un vecchio argomento ma che ne dici di impostare un array su null? – drpelz

+5

In realtà 'array = null;' elimina l'array stesso invece di pulirlo. Fondamentalmente è lo stesso che succede quando si 'array = [];', il riferimento dell'array precedente viene perso e sarà probabilmente raccolto dalla garbage collection (che potrebbe non essere il risultato desiderato). – Biro456

+1

Perché non 'array = new Array()'? –

2

Mi chiedo, perché si vuole cancellare l'Array in quel modo? la cancellazione di tutti i riferimenti a tale array lo renderà disponibile per la garbage collection. array = [] lo farà, se array è l'unico riferimento allo array. se non lo è, forse non dovresti trascurarlo (?)

Inoltre, si ricorda che gli array accettano le stringhe come chiavi. sia la splice che la lunghezza operano esclusivamente su chiavi intere, quindi non avranno alcun effetto sulle chiavi String.

btw .: array.splice(array.length - 1, 1); è equivalente a array.pop();

+0

Voglio renderlo disponibile alla garbage collection, voglio svuotarlo. – ALOToverflow

+0

Gli array piuttosto sicuri in AS3 non accettano le stringhe come chiavi. Gli oggetti fanno, ma non gli array. –

+0

@Omnomlets: ti sbagli. la prossima volta prova a verificare le tue dichiarazioni. – back2dos

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

questo ha sempre funzionato abbastanza bene per me, ma non ho avuto la possibilità di eseguirlo tramite il profiler ancora

2

C'è una chiave differenza tra array.pop() e array.splice (array.length - 1, 1) che è quel pop restituirà il valore dell'elemento. Questo è grande per liners uno utile quando sgombrare un array come:

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

Per array con 100 elementi (parametri in ms, minore è il tempo necessario meno):

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