Jason, What I suggested is probably a bit to complex for what you need. It's kind of a reimplementation of what you are doing.
1. Subclass UIComponent to make your container. 2. Create the layout algorithm in that component. 3. Create a subclass of FlexSprite that is your loader component. 4. Add the FlexSprite subclass instances (your content) to your UIComponent container class with custom layout. 5. Add the UIComponent class to a Container. The above is not really a solution for you right now I'm sure, I was just saying this is what I would do to get maximum performance and memory management. The reason I say this is I have no idea how you are laying out those instances with reflection etc. How are you laying them out (with what layout algorithm) ? Mike On Fri, Oct 17, 2008 at 10:21 AM, flexaustin <[EMAIL PROTECTED]> wrote: > Michael, I have tried using Flexsprite but throws errors about needing > to implementing IUIcomponent. Did I miss something and give up to early? > > --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>, "Michael > Schmalle" > > <[EMAIL PROTECTED]> wrote: > > > > Doug, Jason, > > Since I am a self-centered person that doesn't like to be misunderstood, > > ;-), I could have brought up the 4000 object issue. In previous > threads with > > Jason, he said this was a requirement from the higher order. So I > left it > > where it was, 4000 objects. > > > > As far as the IUIComponent issue, it is Container that requires them not > > 'Flex' itself. > > > > This is where as flex projects, Web 2.0 and performance are reaching > a point > > where it's not just making a Flash IDE animation anymore. > > > > When the requirements of these projects come to this level there is more > > engineering involved and Flex out of the box is not going to handle > > situations like this. > > > > The absolute way to do this is creating a UIComponent subclass that > is the > > container, creating your layout algorithm in this component. Subclass > > FlexSprite, make that your content loader component. > > > > Then instantiate the content components in the UIComponent > container. This > > is the lean version of your design I envision. You could even > recycle the > > content renderers in your container component.... Lot's of things > you could > > do ;-) > > > > Mike > > > > > > On Wed, Oct 15, 2008 at 10:47 PM, flexaustin <[EMAIL PROTECTED]> wrote: > > > > > Doug, what would you go with? Sprite? > > > > > > I thought sprite, but you need to implement all the IUIComponent stuff > > > or use composition correct? Wouldn't composition reduce the benefits > > > gained by using Sprite? > > > > > > Doug, if you message me and I can tell you where to see the component. > > > > > > jason (underscore) newport {at) hot mail > > > > > > --- In flexcoders@yahoogroups.com > > > <flexcoders%40yahoogroups.com><flexcoders% > 40yahoogroups.com>, > > "Doug > > > McCune" <doug@> wrote: > > > > > > > > You've got 4,000 things all moving around at once? Are all 4,000 of > > > those > > > > actually visible? 4,000 UI components seems like a lot for any > layout > > > > manager to have to deal with. I'd try to focus on figuring out how > > > to reduce > > > > the number of UIComponents before I worried about how much memory > > > each one > > > > is taking up. I may be totally off base, but I can't imagine a > scenario > > > > where you want 4,000 images all on the screen at the same time. > > > > > > > > And if you do really need to load 4,000 swfs all at the same time > > > then you > > > > probably want something that's lighter than custom UIComponent > classes, > > > > which would keep those 4,000 objects out of the normal > > > > invalidation/validation cycles of the display list. > > > > > > > > Doug > > > > > > > > On Wed, Oct 15, 2008 at 1:34 PM, Michael Schmalle > > > > <teoti.graphix@>wrote: > > > > > > > > > A side note, > > > > > You are doing some very expensive leg work in the 'content' > setter. > > > > > > > > > > You need to break that out into commitProperties() and > > > updateDisplayList(). > > > > > > > > > > You would get a huge performance increase for sure. > > > > > > > > > > As far as the memory, doesn't look to weird, event listeners > > > without weak > > > > > references can make thing hang around as well. > > > > > > > > > > Mike > > > > > > > > > > > > > > > On Wed, Oct 15, 2008 at 3:08 PM, flexaustin <flexaustin@> wrote: > > > > > > > > > >> So I have this base component, that when running profiler, > says its > > > > >> eating up tons of memory. I have about 4000 of these at one > time in > > > > >> my Flex app (see component code below). This base component is > > > > >> extended by two other components, which are then extended by > two more > > > > >> components each so 3 or 4 levels above this base component. > > > > >> > > > > >> 1. My first question is does the profiler just point to the base > > > class > > > > >> or are there actually 4000 of these being created outside of > their > > > > >> extended children? > > > > >> > > > > >> 2. My 2nd question is is their anything wrong with the code > > > below? Why > > > > >> is it eatin memory? The parameter "content" when pulled in is > a swf > > > > >> file (icon) that is 5kb each so 5kb * 4000... you get the math. > > > > >> > > > > >> When I run this progam the CarouselImage's are using up 30% > to 35% of > > > > >> my apps memory usage. And my app is eating up 725,000kb of > mem usage, > > > > >> thus crashing my pretty decent computer. > > > > >> > > > > >> // ----------- BEGIN CODE -------------------------------------- > > > > >> package com.mysite.views.components > > > > >> { > > > > >> > > > > >> import flash.display.DisplayObject; > > > > >> import flash.system.ApplicationDomain; > > > > >> > > > > >> import mx.core.UIComponent; > > > > >> import mx.events.ResizeEvent; > > > > >> > > > > >> public class CarouselImage extends UIComponent > > > > >> { > > > > >> // Content > > > > >> private var _content:DisplayObject; > > > > >> private var _contentWidth:Number; > > > > >> private var _contentHeight:Number; > > > > >> > > > > >> public function CarouselImage(content:*=null) > > > > >> { > > > > >> super(); > > > > >> > > > > >> // Set content > > > > >> this.content = content; > > > > >> } > > > > >> > > > > >> // Properties > > > > >> [Inspectable] > > > > >> public function get content():DisplayObject > > > > >> { > > > > >> return _content; > > > > >> } > > > > >> > > > > >> public function set content(value:*):void > > > > >> { > > > > >> if (_content != null) > > > > >> { > > > > >> removeChild(_content) > > > > >> removeEventListener(ResizeEvent.RESIZE, handleResize); > > > > >> } > > > > >> > > > > >> if (value is String) > > > > >> { > > > > >> try > > > > >> { > > > > >> value = ApplicationDomain.currentDomain.getDefinition(value); > > > > >> } > > > > >> catch (error:*) > > > > >> { > > > > >> // Do nothing > > > > >> } > > > > >> } > > > > >> > > > > >> if (value is Class) > > > > >> value = new value(); > > > > >> > > > > >> _content = value as DisplayObject; > > > > >> > > > > >> if (_content != null) > > > > >> { > > > > >> _contentWidth = _content.width; > > > > >> _contentHeight = _content.height; > > > > >> > > > > >> addChild(_content); > > > > >> addEventListener(ResizeEvent.RESIZE, handleResize); > > > > >> > > > > >> scaleContent(); > > > > >> } > > > > >> > > > > >> this.invalidateDisplayList(); > > > > >> this.invalidateProperties(); > > > > >> this.invalidateSize(); > > > > >> } > > > > >> > > > > >> public function get contentWidth():Number > > > > >> { > > > > >> return _contentWidth; > > > > >> } > > > > >> > > > > >> public function get contentHeight():Number > > > > >> { > > > > >> return _contentHeight; > > > > >> } > > > > >> > > > > >> // Measure and draw > > > > >> private function scaleContent():void > > > > >> { > > > > >> if (_content != null && width > 0 && height > 0) > > > > >> { > > > > >> // Width > > > > >> _content.scaleX = width / contentWidth; > > > > >> // Center the image > > > > >> _content.x = (width - (contentWidth * _content.scaleX)) * 0.5; > > > > >> > > > > >> // Height > > > > >> _content.scaleY = height / contentHeight; > > > > >> // Center the image > > > > >> _content.y = (height - (contentHeight * _content.scaleY)) * 0.5; > > > > >> } > > > > >> } > > > > >> > > > > >> // Event handlers > > > > >> private function handleResize(event:ResizeEvent):void > > > > >> { > > > > >> scaleContent(); > > > > >> this.invalidateDisplayList(); > > > > >> this.invalidateProperties(); > > > > >> this.invalidateSize(); > > > > >> } > > > > >> > > > > >> } > > > > >> } > > > > >> // ----------------- END CODE > ------------------------------------ > > > > >> > > > > >> > > > > > > > > > > > > > > > -- > > > > > Teoti Graphix, LLC > > > > > http://www.teotigraphix.com > > > > > > > > > > Teoti Graphix Blog > > > > > http://www.blog.teotigraphix.com > > > > > > > > > > You can find more by solving the problem then by 'asking the > > > question'. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > Teoti Graphix, LLC > > http://www.teotigraphix.com > > > > Teoti Graphix Blog > > http://www.blog.teotigraphix.com > > > > You can find more by solving the problem then by 'asking the question'. > > > > > -- Teoti Graphix, LLC http://www.teotigraphix.com Teoti Graphix Blog http://www.blog.teotigraphix.com You can find more by solving the problem then by 'asking the question'.