Hiya, I made it an external SWF and it does help with the memory leak a little bit... But there is still a gaping hole in the code... I'm guessing part of it, is in the loader...
On Jun 9, 3:00 pm, Jensa <[email protected]> wrote: > @colouredfunk I've been a bit busy so I haven't been able to research > this more, but putting it into an external SWF would probably make it > worse. If you have amemoryleak, you could potentially get problems > unloading the SWF due to the leaks so it is probably more manageable > as part of the main SWF. > > J > > On Jun 8, 10:30 am, colouredfunk <[email protected]> wrote: > > > > > After doing more tests, I'm still getting a massivememoryleakin > > just destory and replacing 3DS models. > > > package > > { > > import away3d.animators.VertexAnimator; > > import away3d.containers.View3D; > > import away3d.core.base.Mesh; > > import away3d.core.base.Vertex; > > import away3d.core.utils.Debug; > > import away3d.events.Loader3DEvent; > > import away3d.events.MaterialEvent; > > import away3d.loaders.data.AnimationData; > > import away3d.loaders.data.MaterialData; > > import away3d.loaders.Loader3D; > > import away3d.loaders.LoaderCube; > > import away3d.loaders.Max3DS; > > import away3d.loaders.Md2; > > import away3d.loaders.utils.AnimationLibrary; > > import away3d.materials.BitmapFileMaterial; > > import away3d.materials.BitmapMaterial; > > import away3d.materials.WireColorMaterial; > > import away3d.primitives.Plane; > > import away3d.core.utils.Cast > > > import flash.display.Sprite; > > import flash.events.Event; > > import flash.events.MouseEvent > > > [SWF(backgroundColor = "#000000", width = "800", height = "600")] > > > public class MaxLoadTest extends Sprite > > { > > > private var _view:View3D; > > > private var _md2:Max3DS > > private var _loader:LoaderCube > > private var _clickFlag:Boolean = false > > public function MaxLoadTest() > > { > > //Debug.active = true > > _view = new View3D(); > > addChild(_view); > > _view.x = 400; > > _view.y = 300; > > _md2 = new Max3DS(); > > this.stage.addEventListener(MouseEvent.CLICK, > > _onMouseClick); > > > } > > > private function _onMouseClick(e:Event):void > > { > > if (_clickFlag) { > > cleanUp(); > > } else { > > setUp(); > > } > > } > > private function cleanUp():void > > { > > trace("cleanUp") > > removeEventListener(Event.ENTER_FRAME, > > _onEnterFrame); > > for each (var materialData:MaterialData in > > _loader.materialLibrary) > > { > > if (materialData.materialType == > > "textureMaterial") > > { > > (materialData.material as > > BitmapMaterial).bitmap.dispose() > > } > > materialData.material = null > > } > > _loader.geometry = null > > _view.scene.removeChild(_loader); > > _loader = null > > _clickFlag = false > > } > > private function setUp():void > > { > > > trace("setUp") > > _loader = new LoaderCube(); > > _view.scene.addChild(_loader); > > _loader.addEventListener(Loader3DEvent.LOAD_SUCCESS, > > _onLoaderSuccess) > > _loader.loadGeometry("assets/room/room_d.3ds", > > _md2); > > _clickFlag = true > > } > > private function _onLoaderSuccess(e:Loader3DEvent):void > > { > > trace("_onLoaderSuccess") > > > > _loader.removeEventListener(Loader3DEvent.LOAD_SUCCESS, > > _onLoaderSuccess) > > addEventListener(Event.ENTER_FRAME, _onEnterFrame); > > } > > > private function _onEnterFrame(e:Event):void > > { > > _view.render(); > > } > > } > > > } > > > There seems to be alot of people having the same sort of problem... > > > I've spent 3 days on this already and I can't really afford to spend > > any more trying to figure out where I am going wrong, as I pretty sure > > it's aleakin Away3D. > > > Do you think if I made my Away3D section an external SWF it would > > solve thememoryleak? > > > On Jun 7, 4:26 pm, colouredfunk <[email protected]> wrote: > > > > hey, still getting the same problem... I'm only creating view/scene/ > > > camera once. clearing all objects that I create, remove listeners... > > > but thememorykeeps on going up.... like you said Number3D is the > > > main suspect as it is taking up most of thememoryas it never getting > > > any smaller!! > > > > This must amemoryleakin Away3D no? > > > > On Jun 7, 1:16 pm, Jensa <[email protected]> wrote: > > > > > Yeah. Just keep an instance of the View (or engine if you will) > > > > somewhere in your app and add it to stage when you need it. Not sure > > > > of your app setup, but maybe reference it using a Singleton/Static > > > > class var so it's easy to instantiate and push to stage from anywhere? > > > > > As your file showed, there is most probably somememoryleakin the > > > > view but it shouldn't be a problem if you do it like this. I didn't > > > > check it fully, but it looked like the objects declared on stage were > > > > not properly unreferenced as it was Number3D, Vertices, UV and other > > > > basic classes that kept increasing in instance count in the profiler. > > > > I'll see if I can look closer at it. > > > > > J > > > > > On Jun 7, 1:30 pm, colouredfunk <[email protected]> wrote: > > > > > > Hi thanks so much into looking into my problem. > > > > > > The reason why I had the view and scene created each time is because > > > > > on the website I am creating it's a mixture of 3D and normal 2D > > > > > sections... so on the other sections other than the Away3D I want to > > > > > destroy everything, to keep everything nice and clean.. > > > > > > So are you saying I can't properly ever kill an Away3D section? > > > > > > If so, I guess there are two options; make the Away3D section an > > > > > external SWF... or to leave the core engine in the background and not > > > > > reinstantiate it each time the section loads... > > > > > > On Jun 7, 9:38 am, Jensa <[email protected]> wrote: > > > > > > > @colouredfunk You did not write what version of Away3D (Full/Lite, > > > > > > F9/ > > > > > > F10) you were using, but based on your code I guessed it was the > > > > > > Flash > > > > > > 9 branch. > > > > > > > I've had a look at your file using the Flash Builder profiler and I > > > > > > get the same results but this is not amemoryleakin Away3D. Your > > > > > > main problem here is that you add and remove the view all the time. > > > > > > You should not need to do this ever. One view should be enough for > > > > > > any > > > > > > object as you can change what scene it is rendering. > > > > > > > In the example below, I've changed your code so that the view is > > > > > > only > > > > > > created once and that on every second frame we make 500 planes and > > > > > > render them so we see some faster results. On the next frame we > > > > > > remove > > > > > > them. > > > > > > > Pay close attention to your profiler as you run this code. > > > > > > Initially, > > > > > > a lot of objects will accumulate and it will look like there is a > > > > > >memoryleak. However - after creating some ten thousand planes, the > > > > > >memoryusage flattens out. It's only at this point that the Garbage > > > > > > Collection kicks in. > > > > > > > J > > > > > > > CODE: > > > > > > > package > > > > > > { > > > > > > import away3d.containers.View3D; > > > > > > import away3d.materials.WireColorMaterial; > > > > > > import away3d.primitives.Plane; > > > > > > > import flash.display.Sprite; > > > > > > import flash.events.Event; > > > > > > import flash.events.MouseEvent; > > > > > > > [SWF(backgroundColor="#000000", width="800", height="600")] > > > > > > public class Leak3 extends Sprite > > > > > > { > > > > > > private var _view:View3D; > > > > > > private var _clickFlag:Boolean = false > > > > > > private var numPlanesPerFrame:Number = 500; > > > > > > private var planeArray:Array; > > > > > > > public function Leak3() > > > > > > { > > > > > > planeArray = new Array(); > > > > > > _view = new View3D(); > > > > > > addChild(_view); > > > > > > > > ... > > read more »- Hide quoted text - > > - Show quoted text -
