Here is how we manage collection when it comes to Araay collection.

We declare a custom class whic helds an instance of the array
collection and an array for fast searching. 

[Bindable]
public class FullGameHistorySuiteStatuses
{

private var _suiteStatusesArrayCollection : ArrayCollection = new
ArrayCollection();

private var _suiteStatusesArray : Array = new Array();                  


when you add you check if item not already in there, if so just
update, otherwise add ....

public function addSuiteStatus(suiteStatus :
FullGameHistroySuiteStatus) : void {

if (this._suiteStatusesArray[suiteStatus.id + "_"] == null)
{                               this._suiteStatusesArray[suiteStatus.id + "_"] 
= suiteStatus;
this._suiteStatusesArrayCollection.addItem(suiteStatus);
}

else 
{
        FullGameHistroySuiteStatus(this._suiteStatusesArray[suiteStatus.id +
"_"]).updateFullGameHistorySuiteStatus(suiteStatus);
}

}

Put in public getters/setters for props if needed

Now the item class

[Bindable]
public class FullGameHistroySuiteStatus
{

public var id : String;

private var _points : String;
private var _place : String;
                
                //
===================================================================================================
                // Constructor
                //
===================================================================================================
public function FullGameHistroySuiteStatus(id : String)
{
    this.id = id;
}


public function updateFullGameHistorySuiteStatus(suiteStatus :
FullGameHistroySuiteStatus) : void
{
   this._place = suiteStatus.place;
   this._points = suiteStatus.points;
}


This is code snippet extracted form the app, you need to adapt it to
your needs, however it works for us in eficienlyt managing collections
because arrays are very fast for searching while array collections
very good for bindings ...

HTH,
Claudiu

--- In flexcoders@yahoogroups.com, "e_baggg" <[EMAIL PROTECTED]> wrote:
>
> 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 flexcoders@yahoogroups.com, Alex Harui <aharui@> 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: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] 
> On Behalf Of Blake Barrett
> > Sent: Tuesday, October 28, 2008 3:09 PM
> > To: flexcoders@yahoogroups.com
> > 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: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] 
> On Behalf Of e_baggg
> > Sent: Tuesday, October 28, 2008 2:51 PM
> > To: flexcoders@yahoogroups.com
> > 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>
> >
>


Reply via email to