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

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

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

Регистрация: May 2007
Адрес: Saint-Petersburg
Сообщений: 136
Отправить сообщение для progman с помощью ICQ
По умолчанию memory leaks - как ловить и бороться?

у меня в игре происходит очень интенсивная работа с памятью.
создаются сотни объектов - юнитов, выделяется в них память под массивы, объекты удаляются, списки очищаются. Требуется контроллировать утечки памяти. В С++ движке у меня свой манагер памяти который следит за выделением памяти и сигнализирует если вдруг чего не освободил.

какие механизмы в АС3 гарантируют освобождение выделенной памяти?
как проконтролировать что память освободилась?
имеется ли возможность заметить "родной" менеджер памяти на свой?

ибо чую что грустно все может получиться если не контроллировать память.
__________________
fast restart: *((int*)0) = 0;

Старый 19.09.2009, 11:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Механизмов по управлению памятью в AS3 нет. Есть GC, он работает автоматически. Но для того, чтобы он сработал, необходимо соблюдать правил «намусорил — убери».

Старый 19.09.2009, 12:05
progman вне форума Посмотреть профиль Отправить личное сообщение для progman Найти все сообщения от progman
  № 3  
Ответить с цитированием
progman
 
Аватар для progman

Регистрация: May 2007
Адрес: Saint-Petersburg
Сообщений: 136
Отправить сообщение для progman с помощью ICQ
Цитата:
Сообщение от etc Посмотреть сообщение
Но для того, чтобы он сработал, необходимо соблюдать правил «намусорил — убери».
хм...
ок. есть объект:
Код AS3:
unit = new Unit();// - создал
m_unitlist.push( unit ); //- добавил в массив
удалаю:
Код AS3:
var m_unit: Unit = m_unitlist[i];
m_unitlist[i] = m_unitlist[ m_unitlist.length - 1 ];
m_unitlist.pop();// - удалил из массива iй элемент
 
m_unit.destroy(); //вызываю деструктор
delete( m_unit ); 
m_unit = null;
при такой схеме удалится ли в реальности объект unit ?
удалится ли сама вся память под объекты в Unit выделенная через new или для каждого объекта вызвать delete надо?

ну и как нибудь можно подсмотреть у GC что в памяти осталось и что не убрано?
__________________
fast restart: *((int*)0) = 0;


Последний раз редактировалось progman; 19.09.2009 в 12:08.
Старый 19.09.2009, 12:07
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Удалится (только я не понял шаманства с индексами в массиве, m_unitlist.splice(i, 1) достаточно). delete — только для динамических свойств.

И да, в Flex Builder есть профайлер.

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

Регистрация: May 2007
Адрес: Saint-Petersburg
Сообщений: 136
Отправить сообщение для progman с помощью ICQ
Цитата:
Сообщение от etc Посмотреть сообщение
Удалится (только я не понял шаманства с индексами в массиве, m_unitlist.splice(i, 1) достаточно). delete — только для динамических свойств.
шаманства нет - старый прием еще по работе с std::vector - нужный к удалению элемент замещается на последний из хвоста массива и последний удаляется pop или erase
с точки зрения расположения массива в памяти быстрее и дешевле стереть последний элемент нежели из середины ибо удаление элемента из середины приводит к большой memcpy что не есть гуд.

Цитата:
Сообщение от etc Посмотреть сообщение
И да, в Flex Builder есть профайлер.
можешь ссылку кинуть чтобы поподробнее с сабжем познакомиться?
__________________
fast restart: *((int*)0) = 0;

Старый 19.09.2009, 12:28
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
С кем, с Flex Builder? http://adobe.com/products/flex/

Старый 19.09.2009, 12:37
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Код AS3:
m_unitlist[i] = m_unitlist[ m_unitlist.length - 1 ];
Эээ?

Старый 19.09.2009, 12:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Код AS3:
m_unitlist[i] = m_unitlist[ m_unitlist.length - 1 ];
Эээ?
Что смущает?

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

Регистрация: Nov 2008
Сообщений: 205
Отправить сообщение для Smrad с помощью ICQ
Код AS3:
m_unitlist[i] = m_unitlist[ m_unitlist.length - 1 ];
В AS3 - массивы не настоящие массивы. Нужно тестировать, дает ли это выигрыш в производительности или надоборот .

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

Регистрация: May 2007
Адрес: Saint-Petersburg
Сообщений: 136
Отправить сообщение для progman с помощью ICQ
Цитата:
Сообщение от Smrad Посмотреть сообщение
Код AS3:
m_unitlist[i] = m_unitlist[ m_unitlist.length - 1 ];
В AS3 - массивы не настоящие массивы. Нужно тестировать, дает ли это выигрыш в производительности или надоборот .
ну полюбому в интерпритаторе это есть список объектов std::list или std::map в недрах реализации.

Добавлено через 1 минуту
Цитата:
Сообщение от veisss Посмотреть сообщение
progman ети Unit-ы только в масиве или ето DisplayObject-ы и ты их потом кудато addChild-ишь если ето так то я думаю флешь удаляет только линк который достаешь из масива, попробуй трейсить numChildren-ы у контейнеров
Unit это мой класс и он только в массиве.
более того у меня вообще от флеша нет ничего. только один мувиклип 640х480 который я юзаю как поверхность для отрисовки моего контента. и все объекты внутри игровые либо статикой либо в массивах.
__________________
fast restart: *((int*)0) = 0;


Последний раз редактировалось progman; 19.09.2009 в 13:34.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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