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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.12.2008, 20:47
Smrad вне форума Посмотреть профиль Отправить личное сообщение для Smrad Найти все сообщения от Smrad
  № 1  
Ответить с цитированием
Smrad

Регистрация: Nov 2008
Сообщений: 205
Отправить сообщение для Smrad с помощью ICQ
По умолчанию Как справиться с тормозами сборщика мусора.

Может ли вызвать тормоза наличие в памяти нескольких тысяч (тысячи три, наверное) мувиклипов? Думаю, что может. Клипы не находятся сцене, но самого их существования достаточно для диких тормозов. Подозреваю, что это связано с работой сборщика мусора.
В связи с этим возникает вопрос, можно ли каким нибудь способом управлять его работой (хотя бы отключать на время)?

Старый 12.12.2008, 21:43
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 2  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
наличие в памяти трех тысяч мувиков не всегда означает тормоза. Если там большие растровые картинки - тогда возможно.
Тормоза могут вызвать создание или перемещение такого количества объектов в одном кадре. Никогда, например, нельзя создавать 3 000 лоадеров в одном кадре.
Нужно этот процесс разнести на несколько кадров, по 100 лоадеров, например. Тогда подвисаний не будет.
А gc управлять нельзя. Можно аккуратно поудалять все ссылки на объекты и отписаться от событий и _надеяться_ что он сработает. Но вообще, когда я пишу код, я на него не расчитываю вообще.
Например, есть игра dofus, на флеш. Там за час-два игры легко может скопиться около гига мусора в оперативке.
__________________
~
Never trouble trouble till trouble troubles you!

Старый 13.12.2008, 16:10
Smrad вне форума Посмотреть профиль Отправить личное сообщение для Smrad Найти все сообщения от Smrad
  № 3  
Ответить с цитированием
Smrad

Регистрация: Nov 2008
Сообщений: 205
Отправить сообщение для Smrad с помощью ICQ
Цитата:
Сообщение от Chas Посмотреть сообщение
наличие в памяти трех тысяч мувиков не всегда означает тормоза. Если там большие растровые картинки - тогда возможно.
Если не трудно, то поясните почему, именно растровые картинки могут вызывать тормоза.

Цитата:
Сообщение от Chas Посмотреть сообщение
Тормоза могут вызвать создание или перемещение такого количества объектов в одном кадре. Никогда, например, нельзя создавать 3 000 лоадеров в одном кадре.
Ничего такого я не делаю. Все, объекты просто висят в памяти.

Цитата:
Сообщение от Chas Посмотреть сообщение
А gc управлять нельзя. Можно аккуратно поудалять все ссылки на объекты и отписаться от событий и _надеяться_ что он сработает. Но вообще, когда я пишу код, я на него не расчитываю вообще.
Цитата:
Сообщение от Chas Посмотреть сообщение
Например, есть игра dofus, на флеш. Там за час-два игры легко может скопиться около гига мусора в оперативке.
У меня обратная задача. Мне нужно "обезвредить" gc. Бог с ней с памятью. Игра тормозит, хотя занято лишь 150мб оперативы и загразка цп около 40%. Т.е. даже не тормозит, а скорее лагает.

Старый 13.12.2008, 16:23
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 4  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
Цитата:
Сообщение от Smrad Посмотреть сообщение
Если не трудно, то поясните почему, именно растровые картинки могут вызывать тормоза.
одна распакованная растровая картинка 100х100 занимает в памяти 100*100*32бита = 320000 бит = 39 кбайт.

А еще они долго отрисовываются, потому что ваша видеокарта не задействована для этого.

Непонятно. Gc никто никогда обезвреживать не пытается. Он и так срабатывает очень-очень редко. Вы действительно уверены, что тормоза вызывает большое количество объектов в памяти? Если уменьшить их количество - тормоза уходят? Откуда они берутся в памяти, как быстро создаются в памяти(в течении одного кадра, или накапливаются) и зачем в памяти нужны?
__________________
~
Never trouble trouble till trouble troubles you!

Старый 13.12.2008, 17:17
Smrad вне форума Посмотреть профиль Отправить личное сообщение для Smrad Найти все сообщения от Smrad
  № 5  
Ответить с цитированием
Smrad

Регистрация: Nov 2008
Сообщений: 205
Отправить сообщение для Smrad с помощью ICQ
Цитата:
Сообщение от Chas Посмотреть сообщение
одна распакованная растровая картинка 100х100 занимает в памяти 100*100*32бита = 320000 бит = 39 кбайт.
Так она же не всё время распаковывается. Ну висит себе и висит в памяти. Если нет свопа, то и тормозов быть не должно.

Цитата:
Сообщение от Chas Посмотреть сообщение
А еще они долго отрисовываются, потому что ваша видеокарта не задействована для этого.
Ну это понятно. Речь не о рендеринге.

Цитата:
Сообщение от Chas Посмотреть сообщение
Непонятно. Gc никто никогда обезвреживать не пытается. Он и так срабатывает очень-очень редко. Вы действительно уверены, что тормоза вызывает большое количество объектов в памяти? Если уменьшить их количество - тормоза уходят? Откуда они берутся в памяти, как быстро создаются в памяти(в течении одного кадра, или накапливаются) и зачем в памяти нужны?
Происходит следующее: я гружу из swf'ок в память 2-4к мувиков (не считал точно). После чего запускается видюха заставка. Так вот, если не грузить ресурсы видюха не тормозит, иначе тормозит (после просмотра видюхи тормоза не проходят). Вот такие пироги. Никаких тяжелых ENTER_FRAME'ов нет. На сцене единственная видюха и больше ничего. По сути тормозить нечему. Вот я и грешу на gc.

Старый 13.12.2008, 17:33
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 6  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Цитата:
А еще они долго отрисовываются, потому что ваша видеокарта не задействована для этого.
Интересно, если не видеокарта, то что тогда отрисовывает фигуру на экране?

По теме - если клипов нет на сцене, это не значит, что для них не ведутся расчеты. Нужно удалять листенер для клипа, если он есть. Например, если клип был подписан на ENTER_FRAME и если этот клип удалить, не удалив листенер, то ENTER_FRAME будет продолжать срабатывать. Возможно причина в этом. Или в других расчетах, если они ведутся для клипов.

Старый 13.12.2008, 17:36
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 7  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Цитата:
Сообщение от Волгоградец Посмотреть сообщение
Интересно, если не видеокарта, то что тогда отрисовывает фигуру на экране?
Отрисовывает видеокарта.
Только расчеты ведутся не в ней.

Старый 13.12.2008, 17:40
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 8  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
вы грузите из файлов 4к swf'ок в одном кадре? это не мгновенный процесс даже для локальной подгрузки. Скорее всего тормоза из-за этого.


2Волгоградец: изначально видеокарточка нужна была только по одной причине - процессор слишком медленно отрисовывал графику и этот процесс отображался на мониторе и раздражал. Поэтому появилась видеокарточка, у которой есть своя собственная память. Процессор рисует в память видеокарточки, потом видеокарточка мгновенно отображает изображение, а процессор в это время уже рисует в другом куске видеопамяти.

Потом у видеокарточки появился собственный процессор, который заточен под просчет некоторых матриц и векторов, характерных для работы с дисплеем. Поворот, сложение, умножение на скаляр. Так вот флеш всем этим не пользуется. Все повороты, наложение одной картинки на другую, просчет альфы - все вешается на твой процессор.
__________________
~
Never trouble trouble till trouble troubles you!


Последний раз редактировалось Chas; 13.12.2008 в 17:49.
Старый 13.12.2008, 17:42
_Smirnoff вне форума Посмотреть профиль Отправить личное сообщение для _Smirnoff Найти все сообщения от _Smirnoff
  № 9  
Ответить с цитированием
_Smirnoff
 
Аватар для _Smirnoff

блогер
Регистрация: Jul 2007
Адрес: Russia
Сообщений: 292
Записей в блоге: 5
Сборщик мусора никогда не тормозит. Он начинает свою работу по-своему желанию.
__________________
Оптимизация производительности на уровне кода

Старый 13.12.2008, 18:48
Smrad вне форума Посмотреть профиль Отправить личное сообщение для Smrad Найти все сообщения от Smrad
  № 10  
Ответить с цитированием
Smrad

Регистрация: Nov 2008
Сообщений: 205
Отправить сообщение для Smrad с помощью ICQ
Цитата:
Сообщение от _Smirnoff Посмотреть сообщение
Сборщик мусора никогда не тормозит. Он начинает свою работу по-своему желанию.
Это слишком категорично. Например, я могу легко заставить тормозить gc в java или C# (достаточно просто создать большой пул). Особенностей работы gc в as3 я не знаю, но думаю что при желании...

Добавлено через 6 минут
Цитата:
Сообщение от Chas Посмотреть сообщение
вы грузите из файлов 4к swf'ок в одном кадре? это не мгновенный процесс даже для локальной подгрузки. Скорее всего тормоза из-за этого.
Я не понимаю, что значит в одном кадре? Загрузка во флеш асинхронная, и вреде бы другой и нет. Я 5-8 секунд наблюдаю полосочку загрузки после чего собственно и начинается видюшка.

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

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

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


 


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


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