为了尝试了解actionscript的垃圾收集器,我设置了一个示例项目,该项目在舞台上循环补间像素弯曲器参数的值。
我首先关心的是在启动时使用的内存量(~26MB)。虽然我倾向于相信我通过尽可能删除事件侦听器和清空垃圾收集的无用对象来谨慎对待内存,但我也认为我没有完全掌握它在哪里、为什么以及何时工作。
总系统内存的跟踪显示,从大约26MB开始稳步上升,到大约一分钟后(大约一分钟)后达到大约28MB。突然,它降到了25MB,然后又继续上升。这似乎循环了一遍又一遍。
这里有一些问题浮现在脑海中: 1.垃圾收集器是否有一般的时间延迟? 2.它是否在分配了一定量的内存后激活? 3.是否可以在不依赖垃圾收集器的情况下立即显式删除对象? 4.运行闪存时,内存使用的可接受范围是多少?
附件是我的代码。
import fl.transitions.*;
import fl.transitions.easing.*;
var shader:Shader;
var shaderFilter:ShaderFilter;
var motionTween:Tween;
var filterParameter:Number = 0.0;
var loader:URLLoader = new URLLoader();
var phase:Boolean = false;
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, dataLoaded);
loader.load(new URLRequest("myBoringFilter.pbj"));
function dataLoaded(e:Event):void
{
loader.removeEventListener(Event.COMPLETE, dataLoaded);
shader = new Shader(e.target.data);
shaderFilter = new ShaderFilter(shader);
flower.filters = [shaderFilter];
tweenLoop(null);
}
function tweenLoop(e:TweenEvent):void
{
if (motionTween != null)
{
motionTween.removeEventListener(TweenEvent.MOTION_CHANGE, updateFilter);
motionTween.removeEventListener(TweenEvent.MOTION_FINISH, tweenLoop);
motionTween = null;
}
phase = !phase;
if (phase == true)
{motionTween = new Tween(this, "filterParameter", Regular.easeOut, filterParameter, 100.0, 2.0, true);}
else
{motionTween = new Tween(this, "filterParameter", Regular.easeOut, filterParameter, -100.0, 1.0, true);}
motionTween.addEventListener(TweenEvent.MOTION_CHANGE, updateFilter);
motionTween.addEventListener(TweenEvent.MOTION_FINISH, tweenLoop);
}
function updateFilter(e:TweenEvent):void
{
shader.data.amount.value = [filterParameter];
flower.filters = [shaderFilter];
//Update Memory
trace("System Total Memory: " + System.totalMemory);
}发布于 2010-03-04 23:46:30
这通常是这个问题最常见的资源:
http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html
https://stackoverflow.com/questions/2379944
复制相似问题