![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 5
|
всем привет!
проблемма такая: нужно реализовать на as3 возможность загрузки внешних картинок и мувиков. они загружаются нормально, но если их нужно загружать поочереди много, и сколько именно неизвестно, допустим бесконечно, то они как бы переполняют память и все висит на моей машине примерно после 2000 загрузки я получаю ошибку : Error #2044: Unhandled ioError:. text=Error #2035: URL Not Found. но картинка там есть и я ее не удалял я скрутил простой пример того как я это делаю, загружаю показываю удаляю... в данном примере главное цикличность загрузок. хочу понять почему когда я удаляю загруженную картинку она не выгружаеться из памяти... вот скрипт: import flash.display.Stage; import flash.display.Sprite; import flash.display.MovieClip; import flash.net.*; import flash.utils.*; import flash.text.*; var indexOfSms:int = 0; var oLoad_mas:Array = new Array; var mas_movie:Array = new Array; mas_movie[0] = m0; mas_movie[1] = m1; var _timer:Timer; _timer = new Timer(100); function load(num:int) { var oLoader:Loader = new Loader(); oLoad_mas[num] = oLoader; if (mas_movie[num].numChildren>1) { mas_movie[num].removeChildAt(1); } mas_movie[num].addChild(oLoad_mas[num]); oLoad_mas[num].load(new URLRequest("img"+num+".png")); oLoad_mas[num].unload(); oLoader.unload(); indexOfSms++; trace ("кол - во загруженных картинок = " + indexOfSms) indexSMS.text = "всего картинок: " + indexOfSms; } function onTimer(event:TimerEvent):void { load(0); load(1); } _timer.addEventListener("timer", onTimer); _timer.start(); хелп |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Потомучто вы ее не удаляете, а только выводите ее из списка отображаемых объектов.
|
|
|||||
|
Регистрация: Nov 2008
Сообщений: 5
|
получаеться что да...
а вот как ее удалить не могу понять... получаеться что Loader после unload(); не убирает ее из память потому что на нее могут ссылаться кто то еще. я не знаю как именно удалить, не подскажите? |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 65
|
Всё удаляется. Пробовал и на 9 и на 10 плеере. В Мозиле тоже неожиданностей не было (память не нарастает). Возможно, у вас срабатывал лимит подключений (вы уверены, что была утечка памяти или это предположение?).
|
|
|||||
|
Регистрация: Nov 2008
Сообщений: 5
|
я тестил из Flash, так вот чем дольше времени играет откомпилированный мувик тем больше памяти ест Flash. доходило до 1,2 гига...
но самое непонятное то что не важно сколько весит каритнка 500 кил или 4 кила.. память то растет это одна проблемма - но основная это то, что когда картинка показывается около 2000 раз выдает ошибку Error #2044: Unhandled ioError:. text=Error #2035: URL Not Found возможно это лимит подключений - но я про это ничего не слышал.. Добавлено через 9 минут да я потестил в браузере там все работает тработало больше 5000 циклов но тогда не понятна ситуация почему в Flash глючит на 2000 цикле а в браузере работет ? |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 65
|
Похоже на глюк плеера (хотя у себя я и на плеерах проверял). На всяк случай добавьте по таймеру в 10сек System.gc(), может поможет.
|
|
|||||
|
Регистрация: Nov 2008
Сообщений: 5
|
возможно из за операционки
я тестил на мак ос икс.... |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
|
|
|||||
|
Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
|
Цитата:
import flash.display.Stage; import flash.display.Sprite; import flash.display.MovieClip; import flash.net.*; import flash.utils.*; import flash.text.*; import flash.events.Event; var indexOfSms:int = 0; var oLoad_mas:Array = new Array; var mas_movie:Array = new Array; mas_movie[0] = m0; mas_movie[1] = m1; var _timer:Timer; _timer = new Timer(100); function load(num:int){ var oLoader:Loader = new Loader(); oLoad_mas[num] = oLoader; if(mas_movie[num].numChildren>1){ mas_movie[num].removeChildAt(1); } mas_movie[num].addChild(oLoad_mas[num]); oLoad_mas[num].load(new URLRequest("img"+num+".jpg")); oLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, eComplete); oLoad_mas[num].unload(); oLoader.unload(); indexOfSms++; trace ("кол - во загруженных картинок = " + indexOfSms+', '+System.totalMemory) indexSMS.text = "всего картинок: " + indexOfSms; } function onTimer(event:TimerEvent):void { load(0); load(1); } function eComplete(e:Event):void{ trace('complete'); var bmp:Bitmap = (e.target as LoaderInfo).loader.content as Bitmap; if (bmp.bitmapData != null) bmp.bitmapData.dispose(); e.target.removeEventListener(Event.COMPLETE, eComplete); } _timer.addEventListener("timer", onTimer); _timer.start(); |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 65
|
Чтобы не заботиться о removeEventListener (из-за которого объект действительно может не удаляться), можно использовать слабые ссылки (weak reference) когда добавляем слушателя:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:27. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| loader , loader as3 |
|
|