Thanks Alex. This is very helpful and exactly in the direction of what I'm seeking to understand. I appreciate it.
Have any recommended resources to learn more? Thanks, Don --- In [email protected], Alex Harui <aha...@...> wrote: > > It doesn't matter if you add columns at run-time or not. The main factor is > how many column you are displaying and how many rows will be displayed. And > note that is different from the total set of columns that could be displayed > and total number of data items: > > Example: I have a 10000 person database with 100 different statistics on > each person. I set up my DataGrid to have 100 columns representing each > statistic, but because it won't fit on the screen I set > horizontalScrollPolicy="true". Still, the DG is likely to be full screen so > it can show about 20 columns and 30 rows. > > Note that if do not set horizontalScrollPolicy="true", the DG will cram all > 100 columns on screen. This makes a significant difference. Instead of > 20x30=600 renderers, it is 100x30=3000 renderers. The DG will take more than > 5 times longer to set up and render 3000 renderers instead of 600 renderers, > memory usage will go way up, and even things like mouse tracking and CPU > utilization at idle time will be impacted. > > The next important thing to remember is that DG has a very generalized update > mechanism. If it detects a change to any of the 10000 person records, it > will refresh "all" of the renderers on the screen. It does not optimize for > whether that renderer is associated with that data item because > labelFunctions and custom renderers make it possible for any data item change > to affect every renderer. This is very inefficient, but we have to be this > conservative otherwise your renderers could miss updates. > > This is important in how you setup and maintain your dataProvider. A common > mistake I see is to take some XML, make a new ArrayCollection, and loop > through the XML creating Person records and using push/addItem to add it to > the ArrayCollection. Every time you do that, the AC generates a change > event, and if the DG is already bound, it is going to try to refresh all of > its renderers. > > So, aggregate changes. If you are converting XML, make an array, convert > items and push them on the array and then set the whole array into the > ArrayCollection's source. > > HTH, > > > On 3/22/10 4:28 PM, "fusionpage" <fusionp...@...> wrote: > > > > > > > > Does anyone have any tips or tricks, in general, about optimizing the Flex > client for best performance in populating/rendering large datasets in an > AdvancedDataGrid? > > I'm specifically NOT asking about improving the server-side. I'm trying to > understand what the factors are on the Flex client-side that impact how fast > data loads/renders into an ADG, when the columns use in-line itemrenderers > and/or the columns are added at run-time. > > Are there any significant difference in performance when comparing different > design patterns or ways of generating the datagrid? e.g. does it matter if it > generated via pure AS3, or if you use MXML? Is performance the same no matter > which design pattern one uses? > > Assume the data is loading via a RemoteObject call. In my case via a > ColdFusion CFC. > > Any tips, tricks, or links so I can learn more? > > So, far, in my experience, most of the performance issues come from the > server-side, but I may be ignorant on the impact of the design on the Flex > side. > > Thanks, > Don > > > > > > > -- > Alex Harui > Flex SDK Team > Adobe System, Inc. > http://blogs.adobe.com/aharui >

