![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
Всем привет!
Столкнулся с проблемой, что флэшка в браузере постоянно растет в размере. Вероятно это из за того что долгое время не срабатывает gc. Читал тут что можно вызвать принудительно gc с помощью localConnection . Хотя увидел в документации что типа есть такой метод System.gc(). Но из за этого: Цитата:
Как быть сейчас с этим? Есть ли еще какие методы очистки, или только через localConnection? Заранее спасибо ![]() |
|
|||||
|
Modus ponens
|
Через ЛК тоже не поможет, если ГК не может удалить объект. Эту проблему нужно искать и решать по-другому. Попробуйте во Флексе запустить профайлер и посмотреть, что не удаляется из памяти.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
наверное щас отправят гуглить как запускать профайлер...
я работаю во flashDevelop+flex_sdk и плюс делаю копноненты swc в cs3. Как его запустить то?где чего нажимать?) причем здесь на форуме сейчас успел прочитать что System.gc() в 10 плеере работает....так ли это? |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
тогда как чистить память?
во флэш постоянно очень активно создаются временные локальные переменные, которые потом должны по идее удаляться, ну покажет мне профайлер что типа такая то переменная не удалена, и что с этой информацией делать? ![]() |
|
|||||
|
Modus ponens
|
Профайлер это инстумент доступный только во флекс билдере, увы, альтернативных профайлеров я не знаю.
Но смысл даже не в этом. Просто ГК убирает из памяти то, что можно убрать, и делает это достаточно регулярно, т.е. если что-то занимает память и "не хочет" ее освобождать, то принудительный вызов ГК ничем не поможет. Нужно искать внешние не обнуленные ссылки, не убраные экземплаяры битмапдаты, не выключенные таймеры и т.д.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
ок, спасибо!
|
|
|||||
|
Вообще работа мифического GC покрыта туманом. Вот простенький тест:
package { import flash.display.Sprite; import flash.events.TimerEvent; import flash.system.System; import flash.utils.Timer; import ru.inils.utils.Debugger; public class Main extends Sprite { private var arr:Array = new Array(); private var timer:Timer; private var s:Sprite; public function Main():void { Debugger.trace(System.totalMemory / 1048576); for (var i:uint = 0; i < 700000; i ++) { s = new Sprite(); arr.push(s); } Debugger.trace(System.totalMemory / 1048576); for (var j:Number = 0; j < arr.length; j ++ ) { arr[j] = null; } Debugger.trace(System.totalMemory / 1048576); timer = new Timer(5000); timer.addEventListener(TimerEvent.TIMER, test); timer.start(); } private function test(e:TimerEvent):void { Debugger.trace(System.totalMemory / 1048576); //System.gc(); } } } Добавлено через 27 минут Прошло 32 минуты. Память 357.4375 МБ. Не очистилась. Неужели по мнению GC 357 МБ - это незначительный объем, раз он не срабатывает? |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 78
|
жесть)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|