Как Flex / Flash освобождает свою память? - PullRequest
1 голос
/ 08 мая 2009

Как лучше всего освободить память во Flash? У него есть сборщик мусора? Как вызвать этот GC? Как сделать Объекты применимыми для Сборки Мусора?

У меня есть веб-сайт, который отображает много графиков. Я заметил, что память, которую использует IE, пока мы отображаем эти графики, продолжает увеличиваться и иногда достигает около 500 Мб. Я всегда повторно инициализирую неиспользуемые объекты в NULL.

Ответы [ 4 ]

3 голосов
/ 08 мая 2009

Просто установка ссылки на объекты в NULL не всегда достаточно. Если вы создали какие-либо прослушиватели событий, которые ссылаются на этот объект (или если сам этот объект зарегистрирован в качестве прослушивателя), то на него все равно будут ссылаться.

Один из способов избежать подобных проблем со слушателями - использовать слабые ссылки. addEventListener принимает необязательный аргумент, который позволяет вам использовать слабую ссылку. Это позволит объекту собирать мусор, если на него не ссылаются нигде, кроме слушателя событий со слабыми ссылками (или других слабых ссылок).

3 голосов
/ 08 мая 2009

AS3 имеет встроенный GC. Возможно, лучший ресурс о том, как это работает, это статьи Гранта Скиннера на эту тему:

http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html

Вы можете использовать профилировщик Flex (только Flex Pro), чтобы понять, как работает сборка мусора. Профилировщик отображает, какие объекты в данный момент находятся в памяти, и имеет возможность принудительно собирать мусор одним нажатием кнопки, упрощая определение того, какие из ваших объектов могут быть использованы для сбора мусора в данный момент времени.

1 голос
/ 09 мая 2009

Во многих случаях вы можете освобождать объекты Flex из кучи, но Flash VM не возвращает память операционной системе. Таким образом, вы должны закодировать в память "плато".

http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/

0 голосов
/ 08 мая 2009

Один совет, который я могу вам дать, - это удалить прослушиватели событий, когда они больше не нужны - например, если вы вызываете WebService для получения статических данных, и используете прослушиватель ResultEvent, когда обработчик событий обработан, вызовите removeEventListener, чтобы освободить память, которую он использует. Есть много других советов по использованию памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...