Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   как почистить память? (http://www.flasher.ru/forum/showthread.php?t=85255)

mrspb 19.09.2006 06:43

как почистить память?
 
И снова здравутвуйте! :)
у меня такой ворос:
при большом объёме вычислений (в смысле создаю огромный массив в памяти, более 100 метров, к примеру)
потом обсчитываю его. Потом он не нужен и можно его удалить. Удаляю. Память не освобождается. Как освободить память?

Также пробовал хранить массив в отдельной СВФке и грузить её в другую, когда не нужен - выгружать.unloadMovie() - результат нулевой!

В поиске тоже был там для себя отметил, что Флэш - это "чёрный ящик" и в нём есть "мусорщик". Правда не понятно, как заставить этого мусорщика убирацца :confused:

etc 19.09.2006 13:27

А delete не помогает?

mrspb 19.09.2006 17:20

не помогает.
помню: в 6-ом Флэше помогал.
дело происходит так (если убрать всё лишнее):
в свф "c.swf" грузится свф "v.swf"
в "v.swf" на главной сцене зацикленный мувик "s1", в котором в первом кадре:
Код:

//иницализация
if (k == undefined) {
        i0 = 0;
        tOld = getTimer();
        aaa = new Array();
        delay = 800;
        k = 1;
}
//заполнение памяти
for (i=i0; i<1050000; i++) {
        aaa[i] = Math.random();
        if (getTimer()-tOld>delay) {
                break;
        }
}
tOld = getTimer();
trace('i = '+i);
i0 = i;
if (i == 1050000) {
//зачистка
        this.stop();
        delete aaa;
//флажок в другом файле:
        _root.aaa = 0;
        trace('aaa = '+_root.aaa);
        this.removeMovieClip ();
}

s1 аттачится на главную сцену: this.attachMovie ('s1', 's1_mc', 4);
*
v.swf грузится в c.swf:
Код:

this.createEmptyMovieClip ('cont',1);
aaa  = 1;
this.createEmptyMovieClip ('t',2);
this.cont.loadMovie('v.swf');
trace (cont);
this.t.onEnterFrame = function () {
        if (aaa == 0){
                _root.cont.unloadMovie();
                _root.cont.loadMovie('cj.swf');
                _root.cont.removeMovieClip();
                trace (cont);
                this.removeMovieClip ();
        }
}
в итоге в c.swf остаётся только переменная "ааа", а память не освобождается.


etc 20.09.2006 14:26

mrspb, мне непонятен ваш код. Я не знаю, что такое «v», «t», «aaa», «i0», «tOld», «k» и прочие ничего неговорящие названия переменных.

Код:

aaa = [];
for (i=0; i<50000; i++) {
        aaa[i] = Math.random();
}
delete aaa;
delete i;
trace(aaa); // undefined, всё работает


mrspb 21.09.2006 04:31

не работает, посмотрите в "Диспетчере задач" на график производительности, точнее на график занимаемой памяти: пока работает for, график растёт. потом замирает на одном уровне (,пока не закроешь флэшку), хотя aaa уже удалён.
Для наглядности лучче взять 950000 итераций. У меня такой масивчик занимает прим 110 метров памяти, а там, где памяти (физической) всего 128 метров или того меньше моя флэшка может устроить нехилые тормоза компу.
http://images.people.overclockers.ru/90424.gif (5кб)

etc 21.09.2006 13:47

Ну да, не удаляет…
А зачем такие итерации, если они всё-равно не выполнятся за раз?

mrspb 22.09.2006 03:38

итерации в таких количествах - это к примеру.
если они всё-равно не выполнятся за раз?
в каком смысле не выполнятся? аборт скрипта, чтоли? ну в моём коде выше это предусмотрено :)
Тем не менее, вопрос остаётся открытым...

D12 04.10.2006 01:03

ЭЭЭ .... а так ? =)

Код:

_root.createEmptyMovieClip("kod", 1);
with (kod) {
        aaa = [];
        for (i=0; i<50000; i++) {
                aaa[i] = Math.random();
        }
}
kod.unloadMovie();


mrspb 09.10.2006 06:08

хорошая шутка :lol:
у меня Флэш повис, когда я лист вариэйбл сделал при миллионном массиве :)
анлоадМови () не прокатил ))

_sestra_ 10.10.2006 12:55

Вложений: 1
Я так понимаю Ф.плауер имеет внутренний самокотроль очистки памяти. В этом тесте видно, если запустить свф и смотреть на показатель памяти, как в момент отчистки массива память сначала остаёться той же( иногда растёт, иногда падает чуть-чуть), а затем возвращаеться в начальное положение примерно 4-9 MB, потом растёт до 20-30 MB и так далее...


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

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