The latest release has added quite a few things on the performance front. Especially performance while scrolling. More information here : 

An additional improvement that was made was in regards to memory management. This is something that goes deep into the internals of the grid, so most of you have not had to care about this, but the data area of the grid uses a very lightweight FlexSprite that contains a primitive TextField instance to draw out the data cells. This makes the grid perform well. However, you may ask, why have both FlexSprite AND TextField. The basic problem is this – each cell in the grid is responsible for drawing its own borders as well as backgrounds. , we need the FlexSprite to draw the border and background, and TextField to display text. This is because FlexSprite cannot display text by itself, and TextField cannot draw borders and backgrounds (it does not have a graphics object). So we have a text field wrapped inside a FlexSprite. This allows us to provide features like nested tables, column and row spans, inner level footers/filters/toolbars and a lot more.

However, for plain vanilla grids, this may be a little bit of a overkill. So in those situations, you might be better served using this new flag we recently added – enableFTEDataRenderer – This accomplishes two things – First, it uses the native UIFTETextField introduced in Flex 4. So if you are using custom fonts, you don’t have to include both embedAsCff true and false versions. Second, the UIFTETextField is capable of BOTH rendering text AND drawing graphics. Although ultimately it still wraps a text primitive within it, you may observe lower memory usage with UIFTETextField. We have found this to be a hit or a miss, because UIFTETextField does add some of its own complexity, but in some situations where you see the grid taking up more memory than ideal, try setting enableFTEDataRenderer="true"

Note that the default for this is false, it has to be explicitly enabled.