对象池工具类

早在2008年三年就发布了一个对象池工具类,允许你在集合中放置对象,在需要时再用,众所周知Flex的组件使用代价较高,应该避免有所浪费。对象池在处理反复使用同一对象的情况下是一种很好的设计模式。
  原因是创建对象时需要较多资源,应避免反复创建对象。我再次查看了2008年写的这个类,虽然它工作状态良好,但注意到一件事,以前用的是ArrayCollection。现在用我开发的弱引用字典HashCollection工具类替代ArrayCollection。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下载ReusablePool类:

这个项目的地址是:
http://code.google.com/p/eladlib/

关于对象池,在这个项目里的位置是:
Library\src\com\elad\framework\utils\collections
和Library\src\com\elad\framework\objectpoolmanager\ReusablePool.as

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
用一个例子来实现,该程序将会采用三个对象:视频,图像和列表组件。当你为应用程序添加元素,接着移除它,不断地添加对象会增加内存消耗,你会看到小迟缓。然而,采用对象池,对象被缓存并保存对象实例能降低内存使用。正如你所看到的即使添加和移除对象程序运行也很平稳。
完整地实现代码如下:
codeall.png 
运行效果:
pic_1.png 
   为了测量内存使用情况,你可以使用由 Mr.doob.开发的小型统计类。此外,你也可以使用Eclipse Profiler进行查看。在第一种情况,为程序添加一个元素再移除它,如果程序有内存泄漏profiler分析器会用“红色”线条向你展示。我不是说红色就一定表示内存泄漏,但是要指出的是这时内存使用率很高,因为对象被移除了但垃圾回收器还没有回收到。如你所知,采用removeAllChildren()移除组件中的所有对象,但未必能确保GC能立即释放内存。见Profiler屏幕截图如下:
pic_2.png 
第二个方案,对象被缓存,我没有做任何内存限制。见图:
<ignore_js_op style="word-wrap: break-word; margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Tahoma, Helvetica, SimSun, sans-serif;">pic_3.png 
    该工具类可以限制存储的对象数量,加上约束逻辑类,当需要时再清除所有对象。
    让我们看看该代码创建一个工具类实例,并添加一个对象。
    该工具类是一个单例,所以我们可以在应用程序的生命周期内使用同一个对象。

private var reusablePool:ReusablePool = ReusablePool.getInstance();  

 

添加一个可重用对象。

reusablePool.setReusable( new Reusable(createUI(), "FlexImage") );  

 

可以用acquireReusable方法重新得到对象,之后会将该对象从集合中移除。

// getting the collection  
var reusable:Reusable = reusablePool.acquireReusable(name);  
var component:UIComponent = reusable.object as UIComponent;  

 

使用完毕发送对象至对象池可以用如下代码:

 reusablePool.releaseReusable(reusable);  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值