Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.10.2015, 03:08
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 21  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,283
Цитата:
Можно использовать только при дебаг сборке.
Да, собственно, в дебаге я только и сижу.
По поводу pauseForGCIfCollectionImminent .Я так понял метод позволяет указывать сборщику нужные моменты для сборки мусора.На всякий случай добавил вызов
System.pauseForGCIfCollectionImminent(0);
Качественно картина не изменилась.

Старый 24.10.2015, 16:06
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 22  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Цитата:
Качественно картина не изменилась.
А что должно измениться?

Старый 24.10.2015, 16:43
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 23  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,283
Как я говорил выше хотелось бы чтоб после зачистки мусора объем занятой памяти возвращался к уровню как до старта игры.Пока такое происходит только после нажатия force garbage collection в скауте.Похоже, у скаута какие-то свои механизмы освобождения памяти

Старый 24.10.2015, 19:03
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 24  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
В реальных условиях память очистится только тогда, когда gc решит её очистить.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от illuzor Посмотреть сообщение
В реальных условиях память очистится только тогда, когда gc решит её очистить.
Не совсем так. На мобильниках это очень важный момент. Там System.pauseForGCIfCollectionImminent() с указанием процента засоренности памяти, при которой будет очистка, работает на ура. Проверено. Очищает память сразу после вызова, если ее объем больше, чем указано в параметре, я обычно указываю 0.25, и этого вполне хватает

Старый 24.10.2015, 20:19
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 26  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,283
Цитата:
В реальных условиях память очистится только тогда, когда gc решит её очистить.
Что же тогда делает System.gc()?

Добавлено через 8 минут
caseyryan,Объясни плз в двух словах как работает System.pauseForGCIfCollectionImminent достаточно его один раз вызвать не обязательно его дергать как System.gc?

Старый 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() то только при определенном проценте скопления мусора

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

Старый 24.10.2015, 21:04
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 28  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,283
понапихал вызовов
System.pauseForGCIfCollectionImminent(.25);
посмотрим как поведет.Почему скаут зачищает память лучше самого флэша вопрос остается открытым.

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

Старый 24.10.2015, 21:18
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 29  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Цитата:
Почему скаут зачищает память лучше самого флэша вопрос остается открытым.
Потому что это отладочный инструмент и в него добавили такую возможность.

Цитата:
понапихал вызовов
System.pauseForGCIfCollectionImminent(.25);
Надо не "понапихать", а использовать с умом.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Деструкторы действительно пишу только для компонентов, работающих с растром.
Надо писать деструкторы для всего, на что могут как-то сохраняться ссылки. Я давно у себя такую привычку выработал, и уже забыл про подобные проблемы

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:38.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 20:38.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.