Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Статья: "ActionScript 3. Работа с памятью" (http://www.flasher.ru/forum/showthread.php?t=126334)

bugizavr 16.06.2009 21:48

Статья: "ActionScript 3. Работа с памятью"
 
http://www.dtf.ru/articles/read.php?id=51967

доброго времени суток
поясните работу Memory Controller

willis83 16.06.2009 22:13

поянить работу с пояснениями?....её автор на вас бы обиделся, вы его только что опустили как автора. Задавайте более конкретные вопросы.

Добавлено через 12 минут
В AS3 нет прямых методов удаление объектов из памяти. Для этого флэш плеер периодически вызывает GC, по русски - сборщик мусора и этот сборщик удаляет из памяти экземпляры классов на которые вы удалили все ссылки, листенеры и который не находится в контейнере видимых объектов, т.е. висит в памяти как сопля на стене и вы уже его никак не сможете использовать. Удаляются только ты объекты которые вы сам отрезали он мира и которые в данный момент не выполняют какой-то код, например как листенер ENTERFRAME.

Добавлено через 16 минут
Я например пишу в классах которые буду удалять функцию prepareForDie в которой удаляю все листенеры, чищу переменные, короче готовлю объект к переходу в мир иной. И для удаления сперва запускаю её, а потом стираю ссылку на экземпляр в его родителе.

bugizavr 16.06.2009 22:51

прошу прощения

хотел написать: "поясните работу Memory Controller"

смотрел код

создание огромного числа объектов, потом их удаление....
как танцы с бубном выглядит для меня

etc 16.06.2009 23:10

Так они и есть танцы с бубном :)
Псевдонаучный код, на самом деле просто нужно перелопатить довольно большое количество бесполезных разношерстных данных, чтобы форсировать GC. А в целом подобные «менеджеры», на мой взгляд, бессмысленны. Код просто должен не только гадить, но и подчищать за собой. А принудительные вызовы GC только лишь снизят производительность.

willis83 16.06.2009 23:10

Если вы про описание класса, то советую вам начать изучение as3 с азов, а не разбора классов utils.
Код AS3:

package utils
{
        import flash.system.System;
        import flash.utils.ByteArray;
        import flash.geom.Point;
        import flash.utils.setInterval;
        import flash.net.LocalConnection;
        import flash.utils.setTimeout;
 
        public class MemoryController
        {
                private var mInterval:int; //Интервал обновления, в милисекундах
                private var mWarningMemoryLimit:int; // Размер порога памяти, при котором начинается форсированное очищение
                private var mCriticalMemoryLimit:int; // Размер порога памяти, который является критическим
                private var mAbortFunction:Function; // Функция, вызываемая при достижени критического порога
                private var mWarningFunction:Function; // Функция, вызываемая при достежении опасного порога
                private var mForcedIterationsNum:int;  // Количество принудительных итераций GC, при достижении порога
                private var mForcedCleanInterval:int;  // мин. интервал в милисекундах между принудительными очистками
                private var mIsAbleToForce:Boolean;

Это собственно определение класса и его внутренних переменных. Далее
Код AS3:

public function MemoryController(refreshInterval:int = 1000, warningMemoryLimit:int = 1024*1024*60, 
                                                                                criticalMemoryLimit:int = 1024*1024*100, forcedCleanInterval:int = 60000,
                                                                                forcedIterationsNum:int = 1,
                                                                                abortFunction:Function = null, warningFunction:Function = null):void
                {
                        mInterval = refreshInterval;
                        mWarningMemoryLimit = warningMemoryLimit;
                        mCriticalMemoryLimit = criticalMemoryLimit;
                        mAbortFunction = abortFunction;
                        mWarningFunction = warningFunction;
                        mForcedIterationsNum = forcedIterationsNum;
                        mForcedCleanInterval = forcedCleanInterval;
                        mIsAbleToForce = true;
                        setInterval(checkMemoryUsage, mInterval);
                }

Определение конструктора и передача значений из конструктора в переменные класса, ну а дальше вызывается функция setInterval и там понеслась, анализируйте код.... ну вообще не понятно зачем вам это надо. Тем более автор статьи написал как она работает, чтобы использовать класс, вам не обязательно построчно его разбирать. И вообще в начале освоения as3 можно работать и без таких классов

bugizavr 16.06.2009 23:18

willis83 спасиб за совет)
Цитата:

Сообщение от willis83 (Сообщение 828552)
ну вообще не понятно зачем вам это надо

исходников уже за 150 kb
всерьёз беспокоюсь за производительность флешки
вот создал тему, вдруг кто-нибудь что-то умное скажет

willis83 16.06.2009 23:23

думаю лучше разбирайтесь с исходниками, проследите что вы всё удаляете, что нет ничего лишнего... если код "грязный", то это класс вам не поможет точно.

bugizavr 16.06.2009 23:27

willis83 - это понятно))
код рефакторю постоянно, почти везде вик референс использую
слежу за ссылками

ну да ладно...

kemsky 07.12.2010 17:12

http://compile4fun.wordpress.com/
можно тоже почитать

terbooter 07.12.2010 23:36

Почитал вспомнил про эти статьи, вот народ развлекается! =)

Следуйте рекомендациям адобе.
Используйте профайлер для контроля и поиска утечек.

И вам не понадобятся всякие подпольные рогатки


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

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