AS3 - выгруженные файлы SWM AVM1 прослеживаются как выгруженные, но память не освобождается для компьютера AVM2 - PullRequest
1 голос
/ 29 марта 2010

У меня есть большой проект, встроенный в as3. Частью его основной функциональности является загрузка и выгрузка различных файлов SWF as2. Проблема в том, что память не освобождается после того, как они выгружены.

У меня есть доступ к базе кода as2 swfs, и я уничтожил все объекты, остановил и убил таймеры, слушателей, удалил со сцены, уничтожил все созданные MovieClip.protoypes. Они выглядят чистыми, поскольку отладчик AS2 не показывает остатков объекта после запуска функции уничтожения. В AS3 я закрыл локальное соединение, очистил все ссылки / слушатели AVM1Movie и запустил Loader.unloadAndStop (). Трассировка в flex говорит о том, что swf был выгружен, но, глядя на диспетчер задач Windows, использование памяти никогда не падает до того, которое было до загрузки as2 swf. Каждый as2 swf может занимать до 80 мегабайт каждый раз при запуске, поэтому память быстро израсходуется, загружается и выгружается несколько файлов as2.

На данный момент, если SWF-файлы AS2 выгружены, единственное, что я могу предположить, что можно оставить, это MovieClip.prototype и / или _global, переменные _root добавляют во время работы AS2. Но я прошел через это и не могу найти ничего, что могло бы застрять. Кто-нибудь когда-нибудь видел проблемы с машиной AVM1, не освобождающей ее память?

Ответы [ 2 ]

0 голосов
/ 10 мая 2010

Я думаю, вы должны прочитать эти статьи Гранта Скиннера:

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

http://gskinner.com/blog/archives/2006/07/as3_resource_ma_1.html

http://gskinner.com/blog/archives/2006/08/as3_resource_ma_2.html

Во втором разделе Проблема 2. Загруженный контент действительно указывает на вашу проблему.

0 голосов
/ 30 марта 2010

Единственная проблема в том, что использование памяти не уменьшается, или вы уверены, что память не освобождается? Я более знаком с нехваткой памяти мобильного контента, но, вообще говоря, после того, как Flash запрашивает память у ОС, он не обязательно возвращает его только потому, что он больше не используется.

Скорее, мой опыт показывает, что вы загружаете контент, и ваше использование памяти возрастает, затем вы выгружаете его и использование остается тем же. Затем вы загружаете больше контента, и если ваше использование остается примерно таким же, вы знаете, что вы правильно освободили вещи раньше, и Flash повторно использует освобожденную память для вашего нового контента. Именно так вы обычно должны тестировать, а не ждать, пока использование памяти уменьшится. (Хотя общий объем памяти иногда уменьшается, но когда это происходит, лучше не беспокоиться.)

Кроме того, вам, вероятно, будет лучше отслеживать использование памяти с помощью System.totalMemory, а не то, что отображается в диспетчере задач Windows.

...