This way might work too. It uses less code, and is a little more
transparent to upgrades of the Flex framework:
private var _blockValidateNow:Boolean = false;
override protected function updateDisplayOfItemRenderer
(r:IListItemRenderer):void
{
_blockValidateNow = true;
super.updateDisplayOfItemRenderer(r);
}
override protected function drawCellItem(item:IListItemRenderer,
selected:Boolean=false, highlighted:Boolean=false,
caret:Boolean=false, transition:Boolean=false):void
{
_blockValidateNow = true;
super.drawCellItem(item, selected, highlighted, caret, transition);
}
override public function validateNow():void
{
if (!_blockValidateNow)
super.validateNow();
else
_blockValidateNow = false;
}
--- In [email protected], Adrian Williams <[EMAIL PROTECTED]>
wrote:
>
> Hi Doug,
>
> This makes sense. It's staggering that the validateNow() is
being
> called basically on every cell....
>
> In hope of avoiding recreating the wheel, would you be willing
to
> share your extended code with me so I can give it a whirl and see
if it
> remedies the problem?
>
> Thanks!
> Adrian
>
> Doug McCune wrote:
> > There are a few places within the ADG code where the code loops
over
> > every single item renderer and needlessly (or at least
excessively)
> > calls validateNow() on each renderer. That forces the renderers
to
> > each relayout and draw themselves and does not allow the delayed
> > layout processing that the framework is supposed to allow.
> >
> > See the updateDisplayOfItemRenderer() method in
AdvancedDataGridBase
> > and you'll find this function:
> > protected function updateDisplayOfItemRenderer
(r:IListItemRenderer):void
> > {
> > if (r is IInvalidating)
> > {
> > var ui:IInvalidating = IInvalidating(r);
> > ui.invalidateDisplayList();
> > ui.validateNow();
> > }
> > }
> >
> > that gets run waaay too often.
> >
> > Also see the drawCellItem() method of AdvancedDataGrid, which
down at
> > the bottom of the method has this call:
> >
> > if (item is IFlexDisplayObject)
> > {
> > if (item is IInvalidating)
> > {
> > IInvalidating(item).invalidateDisplayList();
> > IInvalidating(item).validateNow();
> > }
> > }
> >
> > So basically every time your data grid is redrawing itself it
takes
> > way longer than it should. I created an extended version of ADG
and
> > overrode those two methods (had to copy/paste most of the
drawCellItem
> > method) and I removed the calls to validateNow, seemed to speed
things
> > up a lot.
> >
> > Doug
> >
> > On Thu, Sep 4, 2008 at 8:06 AM, Adrian Williams
> > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
> >
> > All,
> >
> > I am seeing some incredible lag while using a couple of
simple
> > panels and a complex ADG. While I love the flexibility and
power
> > of Flex/AS and the ADG, I really need to overcome these
> > performance problems or the project will sink.
> >
> > My ADG has approx. 100 columns with approx. 200 rows, in a
> > grouping collection that contains approx 30 groups.
> >
> > I suspect the lag I am seeing has to do with the
redrawing of
> > the rows. Whenever I scroll or collapse/expand the nodes, it
> > takes between 1/2 to 1 second for the action to complete. And
> > this isn't even a very large dataset...we have some that have
a
> > few thousand rows. I haven't used any item rendering (yet)
that
> > would slow the speed down, though I have two columns that have
> > style functions attached. All in all, this is about as close
to
> > display the raw data as I can get.
> >
> > I have spent some time with the profiler and performance
> > monitor and it appears the the code is sound and without
memory
> > leaks. I have also gone thru to refactor poorly designed
code and
> > remove unnecessary nestings.
> >
> > So my initial questions with this admittedly somewhat
vague
> > problem are:
> >
> > 1.) Is there a way to turn off the animations and would
doing
> > so help with the speed?
> > 2.) Has anyone else faced this same dilemma and how did
you
> > overcome the problems?
> >
> > Thanks,
> > Adrian
> >
> >
> >
>