I'm using a Feathers list (as3) which uses item renderers that load in a photo. The list is set to use a virtual layout.
I'm also using a class called MemoryTracker that tracks memory allocations after garbage collection has run whilst debugging.
Using Adobe Scout, as I scroll the list up and down I can see the memory usage rising.
Within the item renderer class:
private var _loader:Loader;
private var _urlRq:URLRequest;
private var _photoTexture:Texture;
private var _photo:Image;
private var _photoOverlay:Image;
private var _bm:Bitmap;
this.addEventListener(starling.events.Event.REMOVED_FROM_STAGE, destroy);
_loader = new Loader();
_urlRq = new URLRequest('https://www.somewhere.com/photo.jpg');
_loader.contentLoaderInfo.addEventListener (flash.events.Event.COMPLETE, onImageLoadComplete, false, 0, true );
_loader.load ( _urlRq );
private function onImageLoadComplete(e:flash.events.Event):void {
_loader.contentLoaderInfo.removeEventListener(flash.events.Event.COMPLETE, onImageLoadComplete);
_bm = _loader.content as Bitmap;
MemoryTracker.track( _bm, "PidListItemRenderer _bm");
// this is the item that is not being disposed
_photoTexture = Texture.fromBitmapData(_bm.bitmapData);
MemoryTracker.track( _photoTexture, "PidListItemRenderer _photoTextureFromBitmap");
// instance to track and string reference
_photo = new Image(_photoTexture);
MemoryTracker.track( _photo, "PidListItemRenderer _photo");
_containerSprite.addChild(_photo);
_loader.unload();
_loader = null;
_urlRq = null;
}
private function destroy():void {
this.removeEventListener(starling.events.Event.REMOVED_FROM_STAGE, destroy);
_containerSprite.removeChild(_photo);
_photo.dispose();
_photo = null;
_photoTexture.dispose();
_photoTexture = null;
_bm = null;
}
When the list is cleared and garbage collection run I get several instances of the _photoTexture object being retained in memory.
Found reference to [object ConcreteRectangleTexture], label:'PidListItemRenderer _photoTextureFromBitmap' Found reference to [object ConcreteRectangleTexture], label:'PidListItemRenderer _photoTextureFromBitmap' Found reference to [object ConcreteRectangleTexture], label:'PidListItemRenderer _photoTextureFromBitmap' Found reference to [object ConcreteRectangleTexture], label:'PidListItemRenderer _photoTextureFromBitmap'
Does anyone have any comments on what might be happening here?
Thanks,
Mark