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

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

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

Регистрация: Jan 2011
Сообщений: 11
По умолчанию Почему проц грузится? и память забивается?

Всем доброго времени суток
Написал небольшое приложение, но когда запускаю, со временем начинает память засорятся + процессор загружается, не могу понять причину, может надо было делать по другому?
Исходник во вложении...
Вложения
Тип файла: rar test v.0.0.1.rar (9.8 Кб, 20 просмотров)

Старый 18.01.2011, 10:44
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Потому что у вас каждую секунду вызывается функция moveBlocks(e:TimerEvent), которая, в свою очередь, вызывает функцию PaintBl(), где черным по белому сказано:
Код AS3:
for(i=0; i<16; i++)
{
  for(j=0; j<13; j++)
  {
    _block1 = new block1();
    _block2 = new block2();
    if (...) addChild(_block1);
    else addChild(_block2);
  }
}
Т.е. вы ежесекундно добавляете в список отображения некоторое количество вновь созданных объектов. А так как вы их оттуда не удаляете, они продолжают висеть в памяти. Вот, к примеру, что выводит добавление строчки trace("numChildren: " + numChildren); в функции moveBlocks():
Код:
numChildren: 245
numChildren: 360
numChildren: 475
numChildren: 590
numChildren: 705
numChildren: 820
numChildren: 935
numChildren: 1050
numChildren: 1165
numChildren: 1280
numChildren: 1395
numChildren: 1510
numChildren: 1625
И все эти экземпляры block1 или block2, не подлежат удалению сборщиком мусора, потому что на них есть ссылка в списке отображения. Попробуйте где-нибудь, скажем в массиве, сохранять ссылки на блоки, создаваемые в функции PaintBl(), и в начале функции moveBlocks() удалять их методом removeChild().
И отучайтесь писать код в кадрах, пишите его в классах.


Последний раз редактировалось bav; 18.01.2011 в 11:50.
Старый 18.01.2011, 14:34
smad вне форума Посмотреть профиль Отправить личное сообщение для smad Найти все сообщения от smad
  № 3  
Ответить с цитированием
smad

Регистрация: Jan 2011
Сообщений: 11
Понятно, спасибо большое, я думал с массивом что-то не то, вроде как все переписывается
Только вот пока как-то не особо представляю предложенный метод, как сделать ссылки?
ПиСи:Насчет классов ok =)

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Вот, к примеру:
Код AS3:
// Создаем хранилище ссылок.
private var blocksToRemove:Array = [];
 
// В функцию PaintBl добавляем следующее
if (...)
{
  blocksToRemove.push(_block1); // сохраняем в массиве ссылку на наш клип
  addChild(_block1);
} // в блоке else делаем то же самое, только для _block2
 
// А в функции moveBlocks проходимся по элементам массива
// и удаляем их из списка отображения (Display list)
while (blocksToRemove.length)
{
  removeChild(blocksToRemove[0]); // в removeChild() передается ссылка на блок
  blocksToRemove.unshift(); // удаляем из массива элемент с индексом 0.
}
Я не вникал подробно в ваш код, поэтому могут быть некоторые несоответствия того, что я пытаюсь описать, с тем, что у вас получится. Но, надеюсь, идея ясна.

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

Регистрация: Jan 2011
Сообщений: 11
Спасибо, буду экспериментировать

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

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

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


 


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


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