Thanks for the great advice so far...so what is the best way of freeing Images for gc()? I have a DataGrid that has an itemRenderer with a <mx:Image/>...if I have a dataProvider ArrayCollection (where each records has a URL that the Image uses)...does simply setting the dataProvider to null take care of marking the image for GC? And anything I have a Bitmap for? Simply setting to null.
Thanks again. --- In [email protected], Alex Harui <[EMAIL PROTECTED]> wrote: > > If your app creates lots of stuff, you'll create a high-water mark and GC won't run until you get back up near that high-water mark. Images are known to easy ways to set that high-water mark pretty high. > > In general, the answer is to re-use instead of re-create, and only create what you need when you need it. > > -Alex > > From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Blake Barrett > Sent: Tuesday, October 28, 2008 3:09 PM > To: [email protected] > Subject: RE: [flexcoders] Memory issues ... garbage collection only running in IE (not FF or Safari) > > e_baggg, > You're not the only one. We're experiencing very similar problems. Our app just keeps gobbling memory until the browser crashes. We've had to resort to calling dispose() explicitly on every <mx:Image> and bitmap we ever instantiate, and explicitly calling removeAllChildren() on every contaniner before navigating away from anything. Helps a little. I'm going to look in to the link you mentioned. Maybe that will help us a little more than it has for you (fingers crossed). > > Let us all know if you find anything else out. > > Blake > > ________________________________ > From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of e_baggg > Sent: Tuesday, October 28, 2008 2:51 PM > To: [email protected] > Subject: [flexcoders] Memory issues ... garbage collection only running in IE (not FF or Safari) > > So I have an app in production which after 10 minutes of usage began > to perform EXTREMELY slow, and users had to restart the app. (Flex 3) > Windows and Mac...all browsers. I did some Profiling and did not get > far. Whenever I take a Memory Snapshot, gc() is forced and all my > objects are correctly removed from memory. So why are they not gc()'d > in normal runtime?? I know gc() only runs when new memory is requested > and nothing is being drawn/rendered. Both seem to be OK on my side. > > I have read extensively all the blogs and Adobe docs regarding this > issue, including the event listener for ENTER_FRAME which calls > System.gc() twice. (http://www.craftymind.com/2008/04/09/kick- > starting-the-garbage-collector-in-actionscript-3-with-air/). This > unfortunately did not work for me. > > To simplify, I created a simple app that adds and removes RichText > fields. if I create 50 of them, then remove them all, then Add one > back, that *should* force a gc() but it does not. The FF memory always > stays high. I noticed in IE, minimizing the browser window causes a > gc() and my memory drops to a much lower #. > > Has anyone seen or come across this? B/c of this issue, we're pretty > much going to lose our customers and try to wing a html/ajax app > ASAP..so I'm scrambling to resolve this. > > Thanks in advance for any help. > > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > creationComplete="init()" layout="vertical" > > <mx:Script> > <![CDATA[ > import mx.controls.RichTextEditor; > > private function removeit():void > { > this.removeChildAt(2); > } > > private function doit():void > { > var rte : RichTextEditor = new > RichTextEditor(); > rte.width=300; > rte.height=150; > this.addChild(rte); > } > ]]> > </mx:Script> > <mx:Button click="doit()" label="Add"/> > <mx:Button click="removeit()" label="Remove"/> > </mx:Application> >

