Клуб API Карт

Удаление объектов (delete не удаляет из памяти)

cool.v-morozov
26 октября 2013, 16:51

Привет всем.

Столкнулся с такой проблемой: после создание маршрута пробую удалить его с помощью оператора delete, но он все равно остается в памяти.

Проделывал тоже самое с метками - там все отлично.

 

var count = 10000;

var testedObject_Ymaps = {};


function fillArray_Ymaps() {

    var from = "30.218104 60.026010";

    var to = "30.276603 60.002800";

    for(var i = 0; i < count; i++) {

        testedObject_Ymaps[i] = new YMaps

            .Router([from, to], [], {

                avoidTrafficJams: true

            });

    }

}


function deleteObjects_Ymaps() {

    for(var i = 0; i < count; ++i) {

        delete testedObject_Ymaps[i];

    }

}


Сначала запускаем fillArray_Ymaps, делаем snapshot памяти и видим что там count обектов Router

Запускаем deleteObjects_Ymaps и снова делаем snapshot памяти. Теперь не должно быть обектов Router,
но опять видим, что их там count

Вопрос: как их удалить полностью?

6 комментариев
Подписаться на комментарии к посту

Если Вы используете числовые ключи - лучше создать массив, а не объект.

Для удаления всего можно будет приравнять его длину к нулю

function deleteObjects_Ymaps() {
    testedObject_Ymaps.length = 0;
}

 

Либо в вашем текущем варианте так:

function deleteObjects_Ymaps() {
    testedObject_Ymaps = {};
}

Не работает с обьектами Router.

Пробовал создавать Placemark - тогда и мой вариант и ваш удаляет с памяти, а вот Router висит после удаления.

P.S проверяю все в Chrome Developer Tools

Значит есть чтото, что на него ссылается.

Возможно где-то в недрах АПИ регистрируется

Мне кажется, что это единственный источник проблемы.

Есть где-то нормальный Ваш исходник? Не минифицированый.

Для АПИ 1.х нет

Используй 2.0

там нет такой проблемы

А это еще проверить надо =)