Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Forced call GC (http://www.flasher.ru/forum/showthread.php?t=125706)

flash33 31.05.2009 15:25

не волнуйся, у меня в голове памяти не 64 кб.
А применительно
Код AS3:

var a:Object = new Object();
//было
//var b:Object = a;
//нужно
var b:Object = a.clone();
//метод есть для многих объектов, тогда не надо хвататься за голову, когда вдруг случайно что то не то...
a = null;


BlooDHounD 31.05.2009 15:35

flash33, гы ... знаешь какой перерасход памяти будет?

_Smirnoff 31.05.2009 15:35

Да я не про голову, а про ОЗУ. Могу сказать по опыту, что основные лики идут от bitmapData, а к ней никак нельзя clone, тогда точно все встанет. Пулы в помощь. Нужно просто качественно программировать, чтобы за всем уследить

willis83 31.05.2009 15:39

Если объект удаляется значит ссылка ведёт в никуда. Смысл в том что программисту легче отследить использование не актуальных ссылок чем наличие левых листенеров и ссылок на класс который использоваться больше не будет, а если и будет то определится по новой с новыми свойствами. Всё же не помешало бы AS такая возможность.

BlooDHounD 31.05.2009 15:39

flash33, + сколько нужно будет написать синхронизаций, когда будет такое:
Код AS3:

var b:Object = new Object();
function foo(a:Object):Void {
    a.x = 5;
}
foo( b );

в твоём варианте это будет так:
Код AS3:

var b:Object = new Object();
function foo(a:Object):Object {
    a.x = 5;
}
b = foo( b.clone() ).clone();

скорости теряется немерено.

Добавлено через 5 минут
willis83, одинаково муторно отслеживать и то и то. Вы просто не представляете, что это такое :) Вам кажется всё станет просто и прекрасно, жизнь начнёт бить ключом, и наступит мир во всём мире.

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

flash33 31.05.2009 15:59

BlooDHounD, с чего ты взял, что я против использования ссылок? Используй их себе на доброе здоровье. Я говорю только о том, что нынешняя система не дпускает принудительной очистки памяти. Это налагает на программиста обязательство отслеживать используемую память, а программист - это не Господь Бог. Если бы существовал механизм принудительной очистки + обработка эксепшенов возникших как следствие обращения к null, то разработка больших приложений была бы гораздо легче.

Stargazer 31.05.2009 16:11

А я соглашусь с flash33.
P.S. А ещё - сделали бы они нормальные указатели...

wvxvw 31.05.2009 17:07

Цитата:

Сообщение от flash33 (Сообщение 824610)
BlooDHounD, с чего ты взял, что я против использования ссылок? Используй их себе на доброе здоровье. Я говорю только о том, что нынешняя система не дпускает принудительной очистки памяти. Это налагает на программиста обязательство отслеживать используемую память, а программист - это не Господь Бог. Если бы существовал механизм принудительной очистки + обработка эксепшенов возникших как следствие обращения к null, то разработка больших приложений была бы гораздо легче.

Немного не в тему, но где-то близко: недавно пришлось познакомится с Gaia + построеному на ее основе огромному приложению... вот это мрак...
(взято из com.gaiaframework.assets.DisplayObjectAsset)
Код AS3:

override public function destroy():void 
{
        if (_loader != null)
        {
                _loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
                _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
                _loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onError);
                if (_loader.parent) _loader.parent.removeChild(_loader);
                try
                {
                        _loader.unload();
                }
                catch (e:Error)
                {
                        // fail gracefully
                }
                _loader = null;
        }
        super.destroy();
}

Это так, просто для общего представления...
Вот вам и "обработка исключений", и "очистка памяти"...

Тоесть, так чтобы стало понятнее:
- Loader.unload() не генерит исключения никогда.
- контент этого лоадера - всегда должен наследоваться от какого-то класса из фреймворка, ни один из этих дурацких классов не слушает Event.UNLOAD, соответственно, как вы можете видеть, никакой альтернативы этому событию не предтавляется (т.е. никаких колбеков / попыток как-то сказать контенту, что нужно начать выгружаться нету).

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

r_r_f_r 31.05.2009 17:38

Цитата:

Сообщение от BlooDHounD (Сообщение 824607)
посмотрите на мои примеры повыше, и подумайте, что если у объекта будет структура немного посложнее, а что если надо будет сделать рекурсивную структуру? представьте работу 2х программистов, которым приходится работать с одним объектом, и один решает, что объект больше не нужен. а если таких программистов в 5? и это только верхушка айсберга.

А можно пример 5-и программистов работающих с одним объектом?

BlooDHounD 31.05.2009 20:13

r_r_f_r, вопрос не ясен.

Stargazer, Вам тут не СИ :)

flash33, не вижу разницы в отслеживании ошибок, и отписки за собой всех событий. те же яйца, только вид сбоку. елси Вам очень хочется возиться с такой фигнёй, то можете использовать такой класс:
Код AS3:

import flash.utils.Dictionary;
 
class WeakRef {
 
        public function WeakRef(obj:*) {
                super();
                this._dic[ obj ] = true;
        }
 
        private const _dic:Dictionary = new Dictionary( true );
 
        public function get():* {
                for each ( value:* in this._dic ) {
                        return value;
                }
                return null;
        }
 
}



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

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