Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   [Алгоритмы] Упростить (оптимизировать) HELP!! (http://www.flasher.ru/forum/showthread.php?t=214490)

Egstond 01.09.2017 00:28

Упростить (оптимизировать) HELP!!
 
Всем доброго времени суток!
Ситуация следующая, подгружаю ApplicationDomain с данными, далее appDomain.
Данные это Sound и BitmapData.
Нужно данные выгрузить из appDomain в соотв вектора, и appDomain занулить чтобы не мешался.
Решение которое есть у меня - рабочее, но есть подозрения что очень грузоемкое.. можно ли по человечески это сделать все ?

Вот мое решение.
Код AS3:

var SOURСE_MUSIC:Vector.<Sound>new Vector.<Sound>(100),Rooms:Vector.<BitmapData>=new Vector.<BitmapData>(100);
 
var logoClass:Class;
 
for(i=0;i<100;i++){logoClass=appDomain.getDefinition('music' + i) as Class;SOURСE_MUSIC[i]=new logoClass();}
for(i=0;i<100;i++){logoClass=appDomain.getDefinition('walk' + i) as Class;Rooms[i]=new logoClass();}
 
logoClass=null;appDomain=null;

Получаются вопросы..
1) Можно ли как то уменьшить число действий, допустим избавить от посредника в лице logoClass?
2) Может можно не обнулять appDomain, а просто из него достать ссылки, скопировать ссылки в вектора и ими рулить? Но как это сделать?
3) Может можно каждый раз, когда надо, доставать и использовать данные из appDomain через getDefinition.. (не хотелось бы этот сумбурный вариант, но все же, подскажите синтаксис как в этом случае запустить звук или переместить BitmapData. в Bitmap)
4) Или есть какие то другие идеи - решения ?

Bletraut 01.09.2017 00:43

От посредника избавиться можно, но смысл убирать переменную?

Цитата:

3) Может можно каждый раз, когда надо, доставать и использовать данные из appDomain через getDefinition.. (не хотелось бы этот сумбурный вариант, но все же, подскажите синтаксис как в этом случае запустить звук или переместить BitmapData. в Bitmap)
Не совсем понятно зачем это, через getDefinition, конечно, можно данные доставать каждый раз. Но я так понял, что они все сначала достаются и складываются в массив. Звуки и битмапы и так сейчас в векторах хранятся.

Код AS3:

for(i=0;i<100;i++)
{
SOURСE_MUSIC.push(new (appDomain.getDefinition('music' + i) as Class)());
Rooms.push(new (appDomain.getDefinition('walk' + i) as Class)());
}
appDomain=null;

Но смысла в таком коде нет, разве что один цикл можно убрать раз они одинаковые.

Egstond 01.09.2017 00:56

Цитата:

Сообщение от Bletraut (Сообщение 1201668)
От посредника избавиться можно, но смысл убирать переменную?

То есть сейчас лишней утечки памяти нету ? все ок ?


Цитата:

Сообщение от Bletraut (Сообщение 1201668)
Не совсем понятно зачем это, через getDefinition, конечно, можно данные доставать каждый раз. Но я так понял, что они все сначала достаются и складываются в массив. Звуки и битмапы и так сейчас в векторах хранятся.

Данные достаются из appDomain, а еще раньше через loader копируются с удаленного сервера. Изначально вектора пусты, суть в том чтобы их заполнить и не допустить лишней утечки памяти.

Цитата:

Сообщение от Bletraut (Сообщение 1201668)
Но смысла в таком коде нет, разве что один цикл можно убрать раз они одинаковые.

[/quote]

Смысл я описал в предыдущем предложении, равное число 100 - это для примера, естественно числа в реале будут разные

Цитата:

Сообщение от Bletraut (Сообщение 1201668)
Код AS3:

for(i=0;i<100;i++)
{
SOURСE_MUSIC.push(new (appDomain.getDefinition('music' + i) as Class)());
Rooms.push(new (appDomain.getDefinition('walk' + i) as Class)());
}
appDomain=null;


Избавились от переменной, но по загрузке также? Оптимальней невозможно управлять этим контентом?

Bletraut 01.09.2017 01:13

Цитата:

Данные достаются из appDomain, а еще раньше через loader копируются с удаленного сервера. Изначально вектора пусты, суть в том чтобы их заполнить и не допустить лишней утечки памяти.
Они же и заполняются в цикле.

Egstond 01.09.2017 01:16

Цитата:

Сообщение от Bletraut (Сообщение 1201670)
Они же и заполняются в цикле.

да, все норм, а такой метод оптимальный ? Ну в смысле нету такого что 90% памяти забивается зазря ?
Нету ли других более оптимальных методов рулить контентом, который загружается loaderом ?

caseyryan 01.09.2017 08:41

Цитата:

Ну в смысле нету такого что 90% памяти забивается зазря ?
Если 90% из загруженного не используется, то есть)
А так, вполне нормально все. Разве что стиль написания кода очень хреновый. Такой код трудно читается.

Egstond 01.09.2017 09:40

Цитата:

Сообщение от caseyryan (Сообщение 1201674)
Если 90% из загруженного не используется, то есть)
А так, вполне нормально все. Разве что стиль написания кода очень хреновый. Такой код трудно читается.

Что вы имеете в виду под стилем написания, можно пример? Не думал что по 2м строчкам можно определить стиль написания)) имеется в виду использование векторов?

in4core 01.09.2017 17:56

Имеется ввиду вот :

Код AS3:

var SOURСE_MUSIC:Vector.<Sound> = new Vector.<Sound>(100),
var Rooms:Vector.<BitmapData> = new Vector.<BitmapData>(100);
var logoClass:Class;
 
for(var i:int = 0; i<100; i++)
{
      logoClass = appDomain.getDefinition('music' + i) as Class;
      SOURСE_MUSIC[i] = new logoClass();
}
 
for(i = 0; i<100; i++)
{
    logoClass = appDomain.getDefinition('walk' + i) as Class;
    Rooms[i] = new logoClass();
}
 
logoClass=null;
appDomain=null;

Форматирование

Egstond 01.09.2017 20:11

ясно, всем спасибо


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

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