![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Feb 2006
Сообщений: 97
|
И снова здравутвуйте!
![]() у меня такой ворос: при большом объёме вычислений (в смысле создаю огромный массив в памяти, более 100 метров, к примеру) потом обсчитываю его. Потом он не нужен и можно его удалить. Удаляю. Память не освобождается. Как освободить память? Также пробовал хранить массив в отдельной СВФке и грузить её в другую, когда не нужен - выгружать.unloadMovie() - результат нулевой! В поиске тоже был там для себя отметил, что Флэш - это "чёрный ящик" и в нём есть "мусорщик". Правда не понятно, как заставить этого мусорщика убирацца ![]() Последний раз редактировалось Nirth; 19.09.2006 в 13:33. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А delete не помогает?
|
|
|||||
|
Регистрация: Feb 2006
Сообщений: 97
|
не помогает.
помню: в 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 ();
}
* 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 остаётся только переменная "ааа", а память не освобождается.
Последний раз редактировалось mrspb; 19.09.2006 в 17:55. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
mrspb, мне непонятен ваш код. Я не знаю, что такое «v», «t», «aaa», «i0», «tOld», «k» и прочие ничего неговорящие названия переменных.
|
|
|||||
|
Регистрация: Feb 2006
Сообщений: 97
|
не работает, посмотрите в "Диспетчере задач" на график производительности, точнее на график занимаемой памяти: пока работает for, график растёт. потом замирает на одном уровне (,пока не закроешь флэшку), хотя aaa уже удалён.
Для наглядности лучче взять 950000 итераций. У меня такой масивчик занимает прим 110 метров памяти, а там, где памяти (физической) всего 128 метров или того меньше моя флэшка может устроить нехилые тормоза компу. http://images.people.overclockers.ru/90424.gif (5кб) |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Ну да, не удаляет…
А зачем такие итерации, если они всё-равно не выполнятся за раз? |
|
|||||
|
Регистрация: Feb 2006
Сообщений: 97
|
итерации в таких количествах - это к примеру.
если они всё-равно не выполнятся за раз? в каком смысле не выполнятся? аборт скрипта, чтоли? ну в моём коде выше это предусмотрено ![]() Тем не менее, вопрос остаётся открытым... |
|
|||||
|
Регистрация: Feb 2006
Сообщений: 97
|
хорошая шутка :lol:
у меня Флэш повис, когда я лист вариэйбл сделал при миллионном массиве анлоадМови () не прокатил )) |
|
|||||
|
Я так понимаю Ф.плауер имеет внутренний самокотроль очистки памяти. В этом тесте видно, если запустить свф и смотреть на показатель памяти, как в момент отчистки массива память сначала остаёться той же( иногда растёт, иногда падает чуть-чуть), а затем возвращаеться в начальное положение примерно 4-9 MB, потом растёт до 20-30 MB и так далее...
__________________
Счастье - это хорошее здоровье и плохая память |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:15. |
|
|
« Предыдущая тема | Следующая тема » |
|
|