Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.11.2008, 14:39
hardtmuth вне форума Посмотреть профиль Отправить личное сообщение для hardtmuth Найти все сообщения от hardtmuth
  № 1  
Ответить с цитированием
hardtmuth

Регистрация: Nov 2008
Сообщений: 5
По умолчанию Проблеммы с загрузкой внешних jpg, png ...

всем привет!
проблемма такая:
нужно реализовать на as3 возможность загрузки внешних картинок и мувиков.
они загружаются нормально, но если их нужно загружать поочереди много, и сколько именно неизвестно, допустим бесконечно, то они как бы переполняют память и все висит на моей машине примерно после 2000
загрузки я получаю ошибку : Error #2044: Unhandled ioError:. text=Error #2035: URL Not Found. но картинка там есть и я ее не удалял

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


Код AS3:
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();
вот исходник с картинками

хелп

Старый 26.11.2008, 15:08
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 2  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от hardtmuth Посмотреть сообщение
хочу понять почему когда я удаляю загруженную картинку она не выгружаеться из памяти...
Потомучто вы ее не удаляете, а только выводите ее из списка отображаемых объектов.

Старый 26.11.2008, 15:11
hardtmuth вне форума Посмотреть профиль Отправить личное сообщение для hardtmuth Найти все сообщения от hardtmuth
  № 3  
Ответить с цитированием
hardtmuth

Регистрация: Nov 2008
Сообщений: 5
получаеться что да...
а вот как ее удалить не могу понять... получаеться что Loader после unload(); не убирает ее из память потому что на нее могут ссылаться кто то еще.
я не знаю как именно удалить, не подскажите?

Старый 26.11.2008, 17:39
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 4  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Всё удаляется. Пробовал и на 9 и на 10 плеере. В Мозиле тоже неожиданностей не было (память не нарастает). Возможно, у вас срабатывал лимит подключений (вы уверены, что была утечка памяти или это предположение?).

Старый 26.11.2008, 18:05
hardtmuth вне форума Посмотреть профиль Отправить личное сообщение для hardtmuth Найти все сообщения от hardtmuth
  № 5  
Ответить с цитированием
hardtmuth

Регистрация: Nov 2008
Сообщений: 5
я тестил из Flash, так вот чем дольше времени играет откомпилированный мувик тем больше памяти ест Flash. доходило до 1,2 гига...
но самое непонятное то что не важно сколько весит каритнка 500 кил или 4 кила.. память то растет это одна проблемма - но основная это то, что когда картинка показывается около 2000 раз выдает ошибку Error #2044: Unhandled ioError:. text=Error #2035: URL Not Found

возможно это лимит подключений - но я про это ничего не слышал..

Добавлено через 9 минут
да я потестил в браузере там все работает тработало больше 5000 циклов
но тогда не понятна ситуация почему в Flash глючит на 2000 цикле а в браузере работет ?

Старый 26.11.2008, 18:38
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 6  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Похоже на глюк плеера (хотя у себя я и на плеерах проверял). На всяк случай добавьте по таймеру в 10сек System.gc(), может поможет.

Старый 26.11.2008, 18:58
hardtmuth вне форума Посмотреть профиль Отправить личное сообщение для hardtmuth Найти все сообщения от hardtmuth
  № 7  
Ответить с цитированием
hardtmuth

Регистрация: Nov 2008
Сообщений: 5
возможно из за операционки
я тестил на мак ос икс....

Старый 27.11.2008, 00:33
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от hardtmuth Посмотреть сообщение
мак ос икс....
[off]«Это не икс, это десять» ©[/off]

Старый 27.11.2008, 18:42
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 9  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Цитата:
Loader.unload(): Removes a child of this Loader object that was loaded by using the load() method. The property of the associated LoaderInfo object is reset to null. The child is not necessarily destroyed because other objects might have references to it; however, it is no longer a child of the Loader object.
Также можно заметить, что, несмотря на вызов метода unload(), экземпляр класса LoaderInfo (свойство contentLoaderInfo у Loader) всё равно посылает событие Event.COMPLETE. Да и вообще я заметил недавно, что этот метод действует как-то странно (или, точнее говоря, вообще не действует). Поэтому попробуй так:

Код AS3:
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();
Сразу оговорюсь, что у меня под Windows такого заполнения памяти не было ни в одном, ни в другом случае. В районе 20Мб занятой памяти вызывается GC, и она уменьшается до прибл. 15 Мб.

Старый 27.11.2008, 20:57
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 10  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Чтобы не заботиться о removeEventListener (из-за которого объект действительно может не удаляться), можно использовать слабые ссылки (weak reference) когда добавляем слушателя:
Код AS3:
oLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, eComplete,false,0,true);

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
loader , loader as3

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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