Клуб API Карт

Утечки памяти

e-maxx.maxdiver
29 апреля 2014, 03:37

Здравствуйте.

Подскажите пожалуйста, как избегать утечек памяти при последовательном добавлении-удалении геообъектов.

Здесь тестовое приложение, в котором по каждому нажатию кнопки "recalc" создаётся тысяча placemark-ов (перед этим удаляются placemark'и, добавленные ранее):

http://pastebin.com/ueCxWhU1

 

 

 

Если в браузере Google Chrome (version 34.0.1847.116 (Официальная сборка 260972) m, Windows) открыть "Profiles", то видно, что после каждого нажатия "recalc" объём памяти растёт - за несколько десятков нажатий я добрался от 44 до 51 MB.

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

Я вижу что растет размер снэпшота, который записывет профайлер.

Если я открываю Монитор Активности на Маке, и жму эту кнопку "recalc", у меня потребление памяти растет со 160 до 300мб, затем через какое-то время возвращается к 160мб. Видимо это особенность работы GC в Chrome

Но документация Chrome утверждает, что GC запускается перед каждым снэпшотом, поэтому "мусора" быть не должно:

https://developers.google.com/chrome-developer-tools/docs/javascript-memory-profiling

Q: Are "dead" (unreachable) objects included in snapshots?
No. Only reachable objects are included in snapshots. Also, taking a snapshot always starts with doing a GC.

Столкнулся с данной проблемой, так и не нашел ничего. В условиях моей задачи память ростет от 200 до 800 МБ (

Посмотрим, в чем там проблема, спасибо за репорт

Ощущение, что понемногу "текут" все геообъекты, а ещё сильнее - когда к ним привязаны event-handler'ы. Но точно не проверял.