Не совсем понимаю как выделяется и освобождается память в ФФ. Пример:
var images = new Array();
for(i=0; i < 2000; i++) {
var img = document.createElement('img');
img.src='http://localhost/drawer/'+i;
images.push(img);
}
drawer - выдает пнгшки пустые.ФФ при этом слопал до 300 метров памяти. Теперь если удалять массив картинок память уже не высвобождается. Была мысль,что проблема в том, что картинки я не прикрепляю к дереву. Сделал еще один тест, где прикреплял картинки в дерево документа и потом удалял их все в цикле. Результат то же. Что я не учитываю?
Сразу она может не высвобождаться, сборщик мусора может работать не сразу по факту, а переодически, с целью экономии ресурсов, если после удаления подождать несколько минут ?
минут 5 ждал - ничего
так а удаляете как, из DOM типа parentNode.removeChild(), или только ссылки из массива ?
>так а удаляете как, из DOM типа parentNode.removeChild(), или только ссылки из
>массива ?в примере выше я не аппендю объекты в документ, потому и удаляю просто ссылки из массива. Второй тест, который писал, там аппендил и удалял, соответственно, removeChild'ом
вы бы примерчик полный показали, с удалением, было бы лучше, че там лишних пару строк. Вот у меня к примеру если так то все нормально освобождается:<script>
function doCreate()
{
images = new Array();
for(i = 0; i < 300000; i++)
{
var img = document.createElement('img');
img.src='http://localhost/1.bmp';
images.push(img);
}
}function doDel()
{
delete images;
}
</script>
<button onclick='doCreate()'>doCreate()</button>
<button onclick='doDel()'>doDel()</button>захавывает 250 метров и жмет пока не doDel(), а после doDel() в течение полутора минут освобождает.
Хм. А можно узнать какая ОС? Завтра на работе попробую еще разок, может я что-то перемутил. Удлание делал:
1. delete images
дальше польши все варианты в порядке бреда:
2. images = null
3. for(var i=0; i <images.length;i++) {
delete(images[i]);
//images[i] = null;
}
delete images;Тесты я проводил на 3.0.12 в Ubuntu 9.10.
у меня 3.5.2 под XP, и images = null, и = new Array(), и пр. сейчас специально попробовал ;) все нормально высвобождается.