Huh. I just noticed that when I comment out the line that calls enableAutoUpdate(), auto-update still happens. This tells me I'm doing something wrong. Any ideas?
--- In flexcoders@yahoogroups.com, "whatabrain" <[EMAIL PROTECTED]> wrote: > > Replacing the dataProvider isn't the best option for my particular > application, since requests to add rows will come in at random > intervals, and I don't want to lose selection state and such. > > So I've written the code such that, if two add requests happen within > 300ms of each other, I call disableAutoUpdate. If, after that, 500ms > go by with no add requests, I call enableAutoUpdate(). > > But now, adding 1000 rows takes just as long as before. With the tree > collapsed (or with a regular DataGrid), it takes 1 second. With the > tree opened, it takes 8, with or without auto-update. > > Any idea why this might be? I can switch to replacing the > dataProvider and only running this optimization when the app first > loads, but I'd rather not. > > More information: The dataProvider is a subclass of ArrayCollection, > which contains objects with a "children" member, which is another > ArrayCollection. > > > private var m_lastAdd:Number = 0; > private var m_autoUpdateEnabled:Boolean = true; > > // This is called 1000 times > private function AddItem(name:String):void > { > var now:Number = (new Date()).getTime(); > if (m_autoUpdateEnabled && (now - m_lastAdd < 300)) > { > gridData.disableAutoUpdate(); > m_autoUpdateEnabled = false; > setTimeout(flushAddQueue, 500); > } > m_lastAdd = now; > [Then call the add function, which puts items into the 0th group] > } > > private function flushAddQueue():void > { > if (!m_autoUpdateEnabled && ((new Date()).getTime() - m_lastAdd < > 300)) > { > gridData.enableAutoUpdate(); > m_autoUpdateEnabled = true; > } > else > setTimeout(flushAddQueue, 500); > } > > > > Thanks for all your help so far! > > > --- In flexcoders@yahoogroups.com, "Daniel Gold" <danielggold@> > wrote: > > > > I've seen a lot of posts with performance related to using Bindable > > Collections like that. One of the dangerous of having such a useful > easy API > > for updating controls... > > > > Just to expand on what Alex is suggesting, suppose your service > call returns > > to a function called updateData, and your control is bound to a > _data > > ArrayCollection > > > > public function updateData(newData:IList):void > > { > > var newData:Array =[]; > > for each(var data:Object in IList) > > { > > _newData.push(data); > > } > > _data.source = newData; > > _data.refresh(); > > } > > > > That's an extremely basic code example, and actually unnecessary to > loop > > like that in most cases, but basic principle is get your data > structured in > > an Array or similar structure, add new items, remove old > unnecessary items, > > whatever you need to do, concat or replace the source Array of your > > ArrayCollection, and then call refresh which will dispatch a > > COLLECTION_CHANGE event which will trigger any controls using it as > a > > dataProvider to update. > > > > On Thu, Jul 31, 2008 at 6:47 PM, Alex Harui <aharui@> wrote: > > > > > There is enable/disableAutoUpdate, but adding rows one at a > time is > > > inefficient. Just concat the two arrays and replace the > dataprovider > > > > > > > > > ------------------------------ > > > > > > *From:* flexcoders@yahoogroups.com > [mailto:[EMAIL PROTECTED] *On > > > Behalf Of *whatabrain > > > *Sent:* Thursday, July 31, 2008 3:23 PM > > > *To:* flexcoders@yahoogroups.com > > > *Subject:* [flexcoders] How to temporarily stop a dataProvider > from > > > updating UI > > > > > > > > > > > > I've found that adding a lot of rows (1000+) to an > AdvancedDataGrid can > > > be quite slow, if the rows happen to be visible (in an open node > of the > > > tree). I don't know why this is the case, especially since it's > not the > > > case in a regular DataGrid, but I'd like to work around it. > > > > > > So how can I tell the AdvancedDataGrid to temporarily ignore > updates to > > > the dataProvider? Once the large number of rows have been added, > I'll > > > turn the automatic updating back on, for the slow trickle of > updates > > > that come after that. > > > > > > > > > > > >