As3 - Как эффективно очистить массив? - PullRequest
20 голосов
/ 10 февраля 2010

Я пытался очистить массив в ActionScript 3.

Некоторые методы предлагают: array = []; (утечка памяти?)

Другой сказал бы: array.splice(0);

Если у вас есть другие, пожалуйста, поделитесь. Какой из них более эффективен?

Спасибо.

Ответы [ 5 ]

29 голосов
/ 10 февраля 2010

array.length = 0 или array.splice(), кажется, работают лучше всего для общей производительности.

array.splice(0); будет работать быстрее, чем array.splice(array.length - 1, 1);

6 голосов
/ 27 февраля 2013

Для массива из 100 элементов (тесты в мс, чем меньше, тем меньше нужно времени):

// best performance (benchmark: 1157)
array.length = 0;
// lower performance (benchmark: 1554)
array = [];
// even lower performance (benchmark: 3592)
array.splice(0);
2 голосов
/ 07 июня 2012

Существует ключевое различие между array.pop () и array.splice (array.length - 1, 1), которое заключается в том, что pop возвращает значение элемента. Это отлично подходит для удобных однострочников при очистке массива, например:

while(myArray.length > 0){
     view.removeChild(myArray.pop());
}
2 голосов
/ 10 февраля 2010

Интересно, почему вы хотите очистить массив таким образом? очистка всех ссылок на этот массив сделает его доступным для сборки мусора. array = [] сделает это, если array является единственной ссылкой на array. если это не так, то, возможно, вам не следует его уничтожать (?)

также обратите внимание, что массивы принимают строки в качестве ключей. и splice, и длина работают только с целочисленными клавишами, поэтому они не влияют на клавиши String.

кстати: array.splice(array.length - 1, 1); эквивалентно array.pop();

1 голос
/ 03 мая 2012
array.splice(0,array.length);

это всегда работало довольно хорошо для меня, но у меня еще не было возможности запустить его через профилировщик

...