adobe的内存回收机制确实不尽人意.特别是大数据量时内存回收问题更显突出.
以前有哥们曾经探讨过用异常的方式使flex强制进行内存回收.
不过flex4.0之后框架的性能等有明显提升,而且一些类也添加删除了不少方法
现在小小总结一下
gc的核心代码如下,GCClass
public static function GC() { try { var lc1:LocalConnection = new LocalConnection(); lc1.connect('引发异常内容'); } catch(e:Error) { } }
测试目标:1.序什么时候gc
2.将对象设置为null是否有用
3.创建监听后是否应该及时移除
4.videoDisplay在flex3.0和4.0中的区别
测试方法:在主程序中调用定时器或者在帧中,执行测试代码.
主要测试代码:
a.创建对象
private function gcTest():void
{
var obj:Object= new Object();
}
在flex3.0中内存是一直网上跳,但在4.0中框架可能做了处理,内存不会消耗太多.
如果加入gc代码
private function gcTest():void
{
var obj:Object= new Object();
GCClass.GC();
}
则内存会一直平稳不增长.
b.添加监听
添加监听后必须移除监听,才能在强制回收时释放所占内存
c.加载外部文件flv
var flvplay:VideoDisplay = new VideoDisplay();
this.addElement(flvplay);
flvplay.source ="video2.FLV";
flvplay.play();
// flvplay.source =null;
// //首先关闭啊
this.removeElement(flvplay);
GCClass.gc();
只有在关闭流(flex4.0中flvplay没有close方法,只能将flvplay.source=null),并移除显示对象,才能在内存回收时释放掉所占内存