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 n...@tldstudio.com 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...@chattyfig.figleaf.com

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 n...@tldstudio.com 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...@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

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 n...@tldstudio.com 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...@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

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 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

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   )
 {
 _tu = thumbUrl;
 _nu = normalUrl;
 _lu = largeUrl;
 }
 ...
 public function loadLarge() :void
 {
 _largeLoader = new Loader();
 
 _largeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, largeLoaded, 
 false, 0, true

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


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,

   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