Показать сообщение отдельно
Старый 24.10.2015, 20:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 27  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Нет, его суть просто в том, что он вызовет сборщик мусора только в том случае, если объем занятой мусором отведенной среде AIR оперативки (в процентном соотношении), будет больше того, что указан в параметре метода. То есть если ты вызовешь его так:
Код AS3:
System.pauseForGCIfCollectionImminent(.25);
То в момент вызова пройдет проверка сколько процентов памяти занято мусором. Если окажется, что занято больше 25%, то произойдет очистка мусора. Если меньше, то ничего не произойдет.
Этот метод придуман для того, чтобы сделать эти сборки мусора более предсказуемыми.
Я его использую в своих играх после завершения локации. Между локацией и переходом в меню, чтобы автоматическая сборка мусора вдруг не произошла во время боя, к примеру, и из-за нее все либо подвиснет на какое-то время, либо вообще вылетит. А при переходе в меню, когда основная нагрузка уже снижена, как раз самое то вызывать сборку мусора

Цитата:
Что же тогда делает System.gc()?
Принудительно очищает мусор. Но работает это только в AIR и в отладочном плеере.

короче говоря, если ты поставишь System.gc() то по логике он должен в любом случае очищать мусор, а если System.pauseForGCIfCollectionImminent() то только при определенном проценте скопления мусора

У тебя возможно ни то ни другое не работает потому, что где-то есть ссылки на объекты. Думается мне, что у тебя либо вообще нет деструкторов, либо в них половина объектов пропущена. Иначе бы и слушатели удалял там же. У меня работают оба метода без проблем. Скаут это отлично показывает