Ответ 1
array.length = 0
или array.splice()
, как представляется, лучше всего подходит для общей производительности.
array.splice(0);
будет выполняться быстрее, чем array.splice(array.length - 1, 1);
Я искал очистить массив в ActionScript 3.
Некоторые методы предполагают: array = [];
(утечка памяти?)
Другое скажет: array.splice(0);
Если у вас есть другие, пожалуйста, поделитесь. Какой из них более эффективен?
Спасибо.
array.length = 0
или array.splice()
, как представляется, лучше всего подходит для общей производительности.
array.splice(0);
будет выполняться быстрее, чем array.splice(array.length - 1, 1);
Для массива с 100 элементами (контрольные значения в мс, чем меньше время требуется):
// best performance (benchmark: 1157)
array.length = 0;
// lower performance (benchmark: 1554)
array = [];
// even lower performance (benchmark: 3592)
array.splice(0);
Интересно, почему вы хотите очистить массив таким образом? очистка всех ссылок на этот массив сделает его доступным для сбора мусора. array = []
сделает это, если array
является единственной ссылкой на array
. если это не так, вы, возможно, не должны его этпипировать (?)
также обратите внимание, что `Arrays принимают строки в качестве ключей. как сплайсинг, так и длина работают исключительно на целых ключах, поэтому они не будут влиять на клавиши String.
btw.: array.splice(array.length - 1, 1);
эквивалентен array.pop();
Существует ключевое различие между array.pop() и array.splice(array.length - 1, 1), которое поп возвращает значение элемента. Это отлично подходит для удобных интерфейсов при очистке массива вроде:
while(myArray.length > 0){
view.removeChild(myArray.pop());
}
array.splice(0,array.length);
это всегда хорошо работало для меня, но у меня не было возможности запустить его через профайлер.