Re: [Flashcoders] Garbage Collection difficulty

2009-02-02 Thread Leandro Ferreira
quick trick:
http://blogs.eyepartner.com/adrian/flex/flex-tip-6-garbage-collection-in-flex/



On Thu, Jan 29, 2009 at 6:41 AM, Sander Schuurman <
sander.schuur...@oswaldandruby.com> wrote:

> Thnx! ran a few tests on a server; and indeed my code is doing great, and
> the GC occurs when some more memory is needed... thnx again...
>
> I think the concept of this GC is key in AS3 development
>
> -Original Message-
> From: flashcoders-boun...@chattyfig.figleaf.com [mailto:
> flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Nate Beck
> Sent: Wednesday, 28 January 2009 17:34
> To: Flash Coders List
> Subject: Re: [Flashcoders] Garbage Collection difficulty
>
> Ah yes... I knew I read it somewhere... It's in that Grant Skinner article.
>
>
> *Deferred GC and Indeterminacy*
> A *very* important thing to understand about the Garbage Collector in FP9
> is
> that it's operations are deferred. Your objects will not be removed
> immediately when all active references are deleted, instead they will be
> removed at some indeterminate time in the future (from a developer
> standpoint). The GC uses a set of heuristics that look at RAM allocation
> and
> the size of the memory stack (among other things) to determine when to run.
> As a developer, you must accept that fact that you will have no way of
> knowing when (or even if) your inactive objects will get deallocated. You
> must also be aware that inactive objects will continue to execute
> indefinitely (until the GC deallocates it), so code will keep running (ex.
> enterFrames), sounds will keep playing, loads will keep happening, events
> will keep firing, etc.
>
> It's very important to remember that you have no control over when your
> objects will be deallocated, so you must make them as inert as possible
> when
> you are finished with them. Strategies to manage this will be the focus for
> a future article.
>
>
> On Wed, Jan 28, 2009 at 8:31 AM, Nate Beck  wrote:
>
> > It was my understanding that Garbage Collection doesn't always occur
> right
> > away.  When you have orphaned objects sitting on the heap, they are *
> > eligible* for garbage collection.  That doesn't mean they will be removed
> > from memory right away.  Especially if you're testing for JUST that to
> > happen.  Usually GC occurs when more memory is needed.
> >
> > Someone else could probably speak to this topic much more intelligently
> > than me.. but that was my understanding of how GC in general works.
> >
> > Cheers
> >
> >   On Tue, Jan 27, 2009 at 6:04 AM, Sander Schuurman <
> > sander.schuur...@oswaldandruby.com> wrote:
> >
> >> Thnx for the links... tried some, but still with no success... I now
> have
> >> the following:
> >>
> >> public class Image extends MovieClip
> >> {
> >>  private var _thumbLoader:Loader;
> >>  private var _largeLoader:Loader;
> >>
> >>  private var _thumb:Bitmap;
> >>  private var _large:Bitmap;
> >>
> >>  public function loadThumb() :void
> >>  {
> >>  _thumbLoader = new Loader();
> >>  _thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
> >>thumbLoaded, false, 0, true);
> >>  _thumbLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
> >>errorOccured, false, 0, true);
> >>  _thumbLoader.load(new URLRequest(_tu));
> >>  }
> >>
> >>  private function thumbLoaded( e :Event ) :void
> >>  {
> >>  _thumb = Bitmap(e.currentTarget.content);
> >>  _thumb.smoothing = true;
> >>
> >>  addChild(_thumb);
> >>
> >>  _thumbLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,
> >>
> >>  thumbLoaded);
> >>
>  _thumbLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,
> >>
> >>  errorOccured);
> >>  _thumbLoader = null;
> >>
> >>  dispatchEvent(new Event(Image.IMG_LOADED));
> >>  }
> >>
> >>  public function loadLarge() :void
> >>  {
> >>  _largeLoader = new Loader();
> >>  _largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
> >>largeLoaded, false, 0, true);
> >>  _largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
> >>errorOccured, false, 0, true);
> >>  _largeLoader.load(new URLRequest(_lu));
> >>  }
> >>
> >>  private fun

RE: [Flashcoders] Garbage Collection difficulty

2009-01-29 Thread Sander Schuurman
Thnx! ran a few tests on a server; and indeed my code is doing great, and the 
GC occurs when some more memory is needed... thnx again...

I think the concept of this GC is key in AS3 development

-Original Message-
From: flashcoders-boun...@chattyfig.figleaf.com 
[mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Nate Beck
Sent: Wednesday, 28 January 2009 17:34
To: Flash Coders List
Subject: Re: [Flashcoders] Garbage Collection difficulty

Ah yes... I knew I read it somewhere... It's in that Grant Skinner article.


*Deferred GC and Indeterminacy*
A *very* important thing to understand about the Garbage Collector in FP9 is
that it's operations are deferred. Your objects will not be removed
immediately when all active references are deleted, instead they will be
removed at some indeterminate time in the future (from a developer
standpoint). The GC uses a set of heuristics that look at RAM allocation and
the size of the memory stack (among other things) to determine when to run.
As a developer, you must accept that fact that you will have no way of
knowing when (or even if) your inactive objects will get deallocated. You
must also be aware that inactive objects will continue to execute
indefinitely (until the GC deallocates it), so code will keep running (ex.
enterFrames), sounds will keep playing, loads will keep happening, events
will keep firing, etc.

It's very important to remember that you have no control over when your
objects will be deallocated, so you must make them as inert as possible when
you are finished with them. Strategies to manage this will be the focus for
a future article.


On Wed, Jan 28, 2009 at 8:31 AM, Nate Beck  wrote:

> It was my understanding that Garbage Collection doesn't always occur right
> away.  When you have orphaned objects sitting on the heap, they are *
> eligible* for garbage collection.  That doesn't mean they will be removed
> from memory right away.  Especially if you're testing for JUST that to
> happen.  Usually GC occurs when more memory is needed.
>
> Someone else could probably speak to this topic much more intelligently
> than me.. but that was my understanding of how GC in general works.
>
> Cheers
>
>   On Tue, Jan 27, 2009 at 6:04 AM, Sander Schuurman <
> sander.schuur...@oswaldandruby.com> wrote:
>
>> Thnx for the links... tried some, but still with no success... I now have
>> the following:
>>
>> public class Image extends MovieClip
>> {
>>  private var _thumbLoader:Loader;
>>  private var _largeLoader:Loader;
>>
>>  private var _thumb:Bitmap;
>>  private var _large:Bitmap;
>>
>>  public function loadThumb() :void
>>  {
>>  _thumbLoader = new Loader();
>>  _thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
>>thumbLoaded, false, 0, true);
>>  _thumbLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
>>errorOccured, false, 0, true);
>>  _thumbLoader.load(new URLRequest(_tu));
>>  }
>>
>>  private function thumbLoaded( e :Event ) :void
>>  {
>>  _thumb = Bitmap(e.currentTarget.content);
>>  _thumb.smoothing = true;
>>
>>  addChild(_thumb);
>>
>>  _thumbLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,
>>
>>  thumbLoaded);
>>  _thumbLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,
>>
>>  errorOccured);
>>  _thumbLoader = null;
>>
>>  dispatchEvent(new Event(Image.IMG_LOADED));
>>  }
>>
>>  public function loadLarge() :void
>>  {
>>  _largeLoader = new Loader();
>>  _largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
>>largeLoaded, false, 0, true);
>>  _largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
>>errorOccured, false, 0, true);
>>  _largeLoader.load(new URLRequest(_lu));
>>  }
>>
>>  private function largeLoaded( e :Event ) :void
>>  {
>>  _large = e.currentTarget.content;
>>  _large.smoothing = true;
>>  addChild(_large);
>>
>>  _largeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,
>>
>>  largeLoaded);
>>  _largeLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,
>>
>>  errorOccured);
>>  //_largeLoader.content.dispose();
>>  _largeLoader = null;
>>
>>  dispatchEvent(new Event(Image.IMG_LOADED));
>>  }
>>  public function disposeLarge() :void
>>  {
>>  if (_large)
>>   {
>>removeChild(_large);
>>_large.bitmapData.dispose();
>>    _large 

Re: [Flashcoders] Garbage Collection difficulty

2009-01-28 Thread Nate Beck
It was my understanding that Garbage Collection doesn't always occur right
away.  When you have orphaned objects sitting on the heap, they are *
eligible* for garbage collection.  That doesn't mean they will be removed
from memory right away.  Especially if you're testing for JUST that to
happen.  Usually GC occurs when more memory is needed.

Someone else could probably speak to this topic much more intelligently than
me.. but that was my understanding of how GC in general works.

Cheers

On Tue, Jan 27, 2009 at 6:04 AM, Sander Schuurman <
sander.schuur...@oswaldandruby.com> wrote:

> Thnx for the links... tried some, but still with no success... I now have
> the following:
>
> public class Image extends MovieClip
> {
>  private var _thumbLoader:Loader;
>  private var _largeLoader:Loader;
>
>  private var _thumb:Bitmap;
>  private var _large:Bitmap;
>
>  public function loadThumb() :void
>  {
>  _thumbLoader = new Loader();
>  _thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
>thumbLoaded, false, 0, true);
>  _thumbLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
>errorOccured, false, 0, true);
>  _thumbLoader.load(new URLRequest(_tu));
>  }
>
>  private function thumbLoaded( e :Event ) :void
>  {
>  _thumb = Bitmap(e.currentTarget.content);
>  _thumb.smoothing = true;
>
>  addChild(_thumb);
>
>  _thumbLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,
>
>  thumbLoaded);
>  _thumbLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,
>
>  errorOccured);
>  _thumbLoader = null;
>
>  dispatchEvent(new Event(Image.IMG_LOADED));
>  }
>
>  public function loadLarge() :void
>  {
>  _largeLoader = new Loader();
>  _largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
>largeLoaded, false, 0, true);
>  _largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
>errorOccured, false, 0, true);
>  _largeLoader.load(new URLRequest(_lu));
>  }
>
>  private function largeLoaded( e :Event ) :void
>  {
>  _large = e.currentTarget.content;
>  _large.smoothing = true;
>  addChild(_large);
>
>  _largeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,
>
>  largeLoaded);
>  _largeLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,
>
>  errorOccured);
>  //_largeLoader.content.dispose();
>  _largeLoader = null;
>
>  dispatchEvent(new Event(Image.IMG_LOADED));
>  }
>  public function disposeLarge() :void
>  {
>  if (_large)
>   {
>removeChild(_large);
>_large.bitmapData.dispose();
>_large = null;
>   }
>  }
>
> public function dispose() :void
>  {
>  disposeLarge();
>
>  removeChild(_thumb);
>  _thumb.bitmapData.dispose();
>  _thumb = null
>  }
>
> }
>
> Anyone some tips? The large bitmap stays in memory...
>
> -Original Message-
> From: flashcoders-boun...@chattyfig.figleaf.com [mailto:
> flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Glen Pike
>  Sent: Wednesday, 21 January 2009 21:18
> To: Flash Coders List
> Subject: Re: [Flashcoders] Garbage Collection difficulty
>
> Hi,
>
>I think if you use it locally, you still have to "dispose" of it:
>
>http://www.bartclaessens.com/tag/memory-management/
>
>http://labs.bigspaceship.com/2007/02/28/flash-performance-tips-part-ii/
>
>http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html
>
>Search for "dispose" in some of these - also, one of the comments in
> Grant's article mentions testing in the IDE vs testing in the browser
> gives different results for loaded images.
>
>HTH
>
>Glen
>
> Sander Schuurman wrote:
> > That's a local variable right? Doesn't it happen automatic?
> > I must concentrate on the _large Sprite, isn't it?
> >
> >
> > -Original Message-
> > From: flashcoders-boun...@chattyfig.figleaf.com [mailto:
> flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Glen Pike
> > Sent: Wednesday, 21 January 2009 12:20
> > To: Flash Coders List
> > Subject: Re: [Flashcoders] Garbage Collection difficulty
> >
> > Hi,
> >
> > Do you have to destroy the Bitmap you create in the largeLoaded
> > function???
> >
> > Glen
> >
> > Sander Schuurman wrote:
> >
> >> Hi cool list,
> >>
> >> I'm struggling with my Image class. It's supposed to load and unload
> different sized images dynamicl

Re: [Flashcoders] Garbage Collection difficulty

2009-01-28 Thread Nate Beck
Ah yes... I knew I read it somewhere... It's in that Grant Skinner article.


*Deferred GC and Indeterminacy*
A *very* important thing to understand about the Garbage Collector in FP9 is
that it's operations are deferred. Your objects will not be removed
immediately when all active references are deleted, instead they will be
removed at some indeterminate time in the future (from a developer
standpoint). The GC uses a set of heuristics that look at RAM allocation and
the size of the memory stack (among other things) to determine when to run.
As a developer, you must accept that fact that you will have no way of
knowing when (or even if) your inactive objects will get deallocated. You
must also be aware that inactive objects will continue to execute
indefinitely (until the GC deallocates it), so code will keep running (ex.
enterFrames), sounds will keep playing, loads will keep happening, events
will keep firing, etc.

It's very important to remember that you have no control over when your
objects will be deallocated, so you must make them as inert as possible when
you are finished with them. Strategies to manage this will be the focus for
a future article.


On Wed, Jan 28, 2009 at 8:31 AM, Nate Beck  wrote:

> It was my understanding that Garbage Collection doesn't always occur right
> away.  When you have orphaned objects sitting on the heap, they are *
> eligible* for garbage collection.  That doesn't mean they will be removed
> from memory right away.  Especially if you're testing for JUST that to
> happen.  Usually GC occurs when more memory is needed.
>
> Someone else could probably speak to this topic much more intelligently
> than me.. but that was my understanding of how GC in general works.
>
> Cheers
>
>   On Tue, Jan 27, 2009 at 6:04 AM, Sander Schuurman <
> sander.schuur...@oswaldandruby.com> wrote:
>
>> Thnx for the links... tried some, but still with no success... I now have
>> the following:
>>
>> public class Image extends MovieClip
>> {
>>  private var _thumbLoader:Loader;
>>  private var _largeLoader:Loader;
>>
>>  private var _thumb:Bitmap;
>>  private var _large:Bitmap;
>>
>>  public function loadThumb() :void
>>  {
>>  _thumbLoader = new Loader();
>>  _thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
>>thumbLoaded, false, 0, true);
>>  _thumbLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
>>errorOccured, false, 0, true);
>>  _thumbLoader.load(new URLRequest(_tu));
>>  }
>>
>>  private function thumbLoaded( e :Event ) :void
>>  {
>>  _thumb = Bitmap(e.currentTarget.content);
>>  _thumb.smoothing = true;
>>
>>  addChild(_thumb);
>>
>>  _thumbLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,
>>
>>  thumbLoaded);
>>  _thumbLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,
>>
>>  errorOccured);
>>  _thumbLoader = null;
>>
>>  dispatchEvent(new Event(Image.IMG_LOADED));
>>  }
>>
>>  public function loadLarge() :void
>>  {
>>  _largeLoader = new Loader();
>>  _largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,
>>largeLoaded, false, 0, true);
>>  _largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
>>errorOccured, false, 0, true);
>>  _largeLoader.load(new URLRequest(_lu));
>>  }
>>
>>  private function largeLoaded( e :Event ) :void
>>  {
>>  _large = e.currentTarget.content;
>>  _large.smoothing = true;
>>  addChild(_large);
>>
>>  _largeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,
>>
>>  largeLoaded);
>>  _largeLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,
>>
>>  errorOccured);
>>  //_largeLoader.content.dispose();
>>  _largeLoader = null;
>>
>>  dispatchEvent(new Event(Image.IMG_LOADED));
>>  }
>>  public function disposeLarge() :void
>>  {
>>  if (_large)
>>   {
>>removeChild(_large);
>>_large.bitmapData.dispose();
>>    _large = null;
>>   }
>>  }
>>
>> public function dispose() :void
>>  {
>>  disposeLarge();
>>
>>  removeChild(_thumb);
>>  _thumb.bitmapData.dispose();
>>  _thumb = null
>>  }
>>
>> }
>>
>> Anyone some tips? The large bitmap stays in memory...
>>
>> -Original Message-
>> From: flashcoders-boun...@chattyfig.figleaf.com [mailto:
>> flashcoders-boun.

RE: [Flashcoders] Garbage Collection difficulty

2009-01-27 Thread Sander Schuurman
Thnx for the links... tried some, but still with no success... I now have the 
following:

public class Image extends MovieClip
{
 private var _thumbLoader:Loader;
 private var _largeLoader:Loader;
 
 private var _thumb:Bitmap;
 private var _large:Bitmap;
 
 public function loadThumb() :void
 {
  _thumbLoader = new Loader();
  _thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
thumbLoaded, false, 0, true);
  _thumbLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, 
errorOccured, false, 0, true); 
  _thumbLoader.load(new URLRequest(_tu)); 
 }

 private function thumbLoaded( e :Event ) :void 
 {
  _thumb = Bitmap(e.currentTarget.content);
  _thumb.smoothing = true;

  addChild(_thumb);

  _thumbLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, 
thumbLoaded);
  _thumbLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, 
errorOccured);
  _thumbLoader = null;

  dispatchEvent(new Event(Image.IMG_LOADED));
 }

 public function loadLarge() :void
 {
  _largeLoader = new Loader();
  _largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
largeLoaded, false, 0, true);
  _largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, 
errorOccured, false, 0, true); 
  _largeLoader.load(new URLRequest(_lu));
 }

 private function largeLoaded( e :Event ) :void 
 {
  _large = e.currentTarget.content;
  _large.smoothing = true;
  addChild(_large);

  _largeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, 
largeLoaded);
  _largeLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, 
errorOccured);
  //_largeLoader.content.dispose();
  _largeLoader = null;

  dispatchEvent(new Event(Image.IMG_LOADED));
 }
 public function disposeLarge() :void
 {
  if (_large)
   {
removeChild(_large);
_large.bitmapData.dispose();
_large = null;
   }
 }

public function dispose() :void
 {
  disposeLarge();  

  removeChild(_thumb);
  _thumb.bitmapData.dispose();
  _thumb = null
 }

}

Anyone some tips? The large bitmap stays in memory...

-Original Message-
From: flashcoders-boun...@chattyfig.figleaf.com 
[mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Glen Pike
Sent: Wednesday, 21 January 2009 21:18
To: Flash Coders List
Subject: Re: [Flashcoders] Garbage Collection difficulty

Hi,

I think if you use it locally, you still have to "dispose" of it:

http://www.bartclaessens.com/tag/memory-management/

http://labs.bigspaceship.com/2007/02/28/flash-performance-tips-part-ii/

http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html

Search for "dispose" in some of these - also, one of the comments in 
Grant's article mentions testing in the IDE vs testing in the browser 
gives different results for loaded images.

HTH

Glen

Sander Schuurman wrote:
> That's a local variable right? Doesn't it happen automatic?
> I must concentrate on the _large Sprite, isn't it?
>
>
> -Original Message-
> From: flashcoders-boun...@chattyfig.figleaf.com 
> [mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Glen Pike
> Sent: Wednesday, 21 January 2009 12:20
> To: Flash Coders List
> Subject: Re: [Flashcoders] Garbage Collection difficulty
>
> Hi,
>   
> Do you have to destroy the Bitmap you create in the largeLoaded 
> function???
>
> Glen
>
> Sander Schuurman wrote:
>   
>> Hi cool list,
>>
>> I'm struggling with my Image class. It's supposed to load and unload 
>> different sized images dynamicly; but I can't seem to get it to work 
>> properly. The loading works fine, but the unloading not for the full 100%. 
>> It visually unloads the image, but it remains in the memory. I have tried 
>> several different things; I'm a bit stuck now.
>>
>> Here is a stripped class:
>>
>> public class Image extends MovieClip
>> {
>> ...
>> private var _largeLoader:Loader;
>> private var _large:Sprite;
>> ...
>> public function Image( thumbUrl   :String,
>> normalUrl  :String,
>> largeUrl :String   )
>>

Re: [Flashcoders] Garbage Collection difficulty

2009-01-21 Thread Glen Pike

Hi,

   I think if you use it locally, you still have to "dispose" of it:

   http://www.bartclaessens.com/tag/memory-management/

   http://labs.bigspaceship.com/2007/02/28/flash-performance-tips-part-ii/

   http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html

   Search for "dispose" in some of these - also, one of the comments in 
Grant's article mentions testing in the IDE vs testing in the browser 
gives different results for loaded images.


   HTH

   Glen

Sander Schuurman wrote:

That's a local variable right? Doesn't it happen automatic?
I must concentrate on the _large Sprite, isn't it?


-Original Message-
From: flashcoders-boun...@chattyfig.figleaf.com 
[mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Glen Pike
Sent: Wednesday, 21 January 2009 12:20
To: Flash Coders List
Subject: Re: [Flashcoders] Garbage Collection difficulty

Hi,
  
Do you have to destroy the Bitmap you create in the largeLoaded 
function???


Glen

Sander Schuurman wrote:
  

Hi cool list,

I'm struggling with my Image class. It's supposed to load and unload different 
sized images dynamicly; but I can't seem to get it to work properly. The 
loading works fine, but the unloading not for the full 100%. It visually 
unloads the image, but it remains in the memory. I have tried several different 
things; I'm a bit stuck now.

Here is a stripped class:

public class Image extends MovieClip
{
...
private var _largeLoader:Loader;
private var _large:Sprite;
...
public function Image( thumbUrl   :String,
normalUrl  :String,
largeUrl :String   )
{
_tu = thumbUrl;
_nu = normalUrl;
_lu = largeUrl;
}
...
public function loadLarge() :void
{
_largeLoader = new Loader();

_largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, largeLoaded, 
false, 0, true);

_largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, 
errorOccured, false, 0, true);
_largeLoader.load(new URLRequest(_lu));
}

private function largeLoaded( e :Event ) :void
{
var b:Bitmap = Bitmap(largeLoader.content);


_largeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, largeLoaded);

_largeLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, 
errorOccured);
_largeLoader = null;

_large = new Sprite();
_large.addChild(b);
addChild(_large);

dispatchEvent(new Event(Image.IMG_LOADED));
}
...
public function clear( full :Boolean = false ) :void
{
// clear normal img and large img
... ?

// tried things like:

//_normal.removeChildAt(0);
//_normal = null;
//removeChild(_normal);
//_large.removeChildAt(0);
//_large = null;
//removeChild(_large);
//delete(_normal.removeChildAt(0));
//delete(_large.removeChildAt(0));

// removes the images visually, but they won't get GC'ed

if (full)
{
// clear thumb and itself
}
}
}

Thanks in advance!
___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


  



___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


  


--

Glen Pike
01326 218440
www.glenpike.co.uk <http://www.glenpike.co.uk>

___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


RE: [Flashcoders] Garbage Collection difficulty

2009-01-21 Thread Sander Schuurman
That's a local variable right? Doesn't it happen automatic?
I must concentrate on the _large Sprite, isn't it?


-Original Message-
From: flashcoders-boun...@chattyfig.figleaf.com 
[mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Glen Pike
Sent: Wednesday, 21 January 2009 12:20
To: Flash Coders List
Subject: Re: [Flashcoders] Garbage Collection difficulty

Hi,
  
Do you have to destroy the Bitmap you create in the largeLoaded 
function???

Glen

Sander Schuurman wrote:
> Hi cool list,
>
> I'm struggling with my Image class. It's supposed to load and unload 
> different sized images dynamicly; but I can't seem to get it to work 
> properly. The loading works fine, but the unloading not for the full 100%. It 
> visually unloads the image, but it remains in the memory. I have tried 
> several different things; I'm a bit stuck now.
>
> Here is a stripped class:
>
> public class Image extends MovieClip
> {
> ...
> private var _largeLoader:Loader;
> private var _large:Sprite;
> ...
> public function Image( thumbUrl   :String,
> normalUrl  :String,
> largeUrl :String   )
> {
> _tu = thumbUrl;
> _nu = normalUrl;
> _lu = largeUrl;
> }
> ...
> public function loadLarge() :void
> {
> _largeLoader = new Loader();
> 
> _largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, largeLoaded, 
> false, 0, true);
> 
> _largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, 
> errorOccured, false, 0, true);
> _largeLoader.load(new URLRequest(_lu));
> }
>
> private function largeLoaded( e :Event ) :void
> {
> var b:Bitmap = Bitmap(largeLoader.content);
>
> 
> _largeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, 
> largeLoaded);
> 
> _largeLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, 
> errorOccured);
> _largeLoader = null;
>
> _large = new Sprite();
> _large.addChild(b);
> addChild(_large);
>
> dispatchEvent(new Event(Image.IMG_LOADED));
> }
> ...
> public function clear( full :Boolean = false ) :void
> {
> // clear normal img and large img
> ... ?
>
> // tried things like:
>
> //_normal.removeChildAt(0);
> //_normal = null;
> //removeChild(_normal);
> //_large.removeChildAt(0);
> //_large = null;
> //removeChild(_large);
> //delete(_normal.removeChildAt(0));
> //delete(_large.removeChildAt(0));
>
> // removes the images visually, but they won't get 
> GC'ed
>
> if (full)
> {
> // clear thumb and itself
> }
> }
> }
>
> Thanks in advance!
> ___
> Flashcoders mailing list
> Flashcoders@chattyfig.figleaf.com
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>
>
>   

___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


Re: [Flashcoders] Garbage Collection difficulty

2009-01-21 Thread Glen Pike

Hi,
 
   Do you have to destroy the Bitmap you create in the largeLoaded 
function???


   Glen

Sander Schuurman wrote:

Hi cool list,

I'm struggling with my Image class. It's supposed to load and unload different 
sized images dynamicly; but I can't seem to get it to work properly. The 
loading works fine, but the unloading not for the full 100%. It visually 
unloads the image, but it remains in the memory. I have tried several different 
things; I'm a bit stuck now.

Here is a stripped class:

public class Image extends MovieClip
{
...
private var _largeLoader:Loader;
private var _large:Sprite;
...
public function Image( thumbUrl   :String,
normalUrl  :String,
largeUrl :String   )
{
_tu = thumbUrl;
_nu = normalUrl;
_lu = largeUrl;
}
...
public function loadLarge() :void
{
_largeLoader = new Loader();

_largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, largeLoaded, 
false, 0, true);

_largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, 
errorOccured, false, 0, true);
_largeLoader.load(new URLRequest(_lu));
}

private function largeLoaded( e :Event ) :void
{
var b:Bitmap = Bitmap(largeLoader.content);


_largeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, largeLoaded);

_largeLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, 
errorOccured);
_largeLoader = null;

_large = new Sprite();
_large.addChild(b);
addChild(_large);

dispatchEvent(new Event(Image.IMG_LOADED));
}
...
public function clear( full :Boolean = false ) :void
{
// clear normal img and large img
... ?

// tried things like:

//_normal.removeChildAt(0);
//_normal = null;
//removeChild(_normal);
//_large.removeChildAt(0);
//_large = null;
//removeChild(_large);
//delete(_normal.removeChildAt(0));
//delete(_large.removeChildAt(0));

// removes the images visually, but they won't get GC'ed

if (full)
{
// clear thumb and itself
}
}
}

Thanks in advance!
___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


  


___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


[Flashcoders] Garbage Collection difficulty

2009-01-21 Thread Sander Schuurman
Hi cool list,

I'm struggling with my Image class. It's supposed to load and unload different 
sized images dynamicly; but I can't seem to get it to work properly. The 
loading works fine, but the unloading not for the full 100%. It visually 
unloads the image, but it remains in the memory. I have tried several different 
things; I'm a bit stuck now.

Here is a stripped class:

public class Image extends MovieClip
{
...
private var _largeLoader:Loader;
private var _large:Sprite;
...
public function Image( thumbUrl   :String,
normalUrl  :String,
largeUrl :String   )
{
_tu = thumbUrl;
_nu = normalUrl;
_lu = largeUrl;
}
...
public function loadLarge() :void
{
_largeLoader = new Loader();

_largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, largeLoaded, 
false, 0, true);

_largeLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, 
errorOccured, false, 0, true);
_largeLoader.load(new URLRequest(_lu));
}

private function largeLoaded( e :Event ) :void
{
var b:Bitmap = Bitmap(largeLoader.content);


_largeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, largeLoaded);

_largeLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, 
errorOccured);
_largeLoader = null;

_large = new Sprite();
_large.addChild(b);
addChild(_large);

dispatchEvent(new Event(Image.IMG_LOADED));
}
...
public function clear( full :Boolean = false ) :void
{
// clear normal img and large img
... ?

// tried things like:

//_normal.removeChildAt(0);
//_normal = null;
//removeChild(_normal);
//_large.removeChildAt(0);
//_large = null;
//removeChild(_large);
//delete(_normal.removeChildAt(0));
//delete(_large.removeChildAt(0));

// removes the images visually, but they won't get GC'ed

if (full)
{
// clear thumb and itself
}
}
}

Thanks in advance!
___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders