`
windmark
  • 浏览: 32159 次
社区版块
存档分类
最新评论

对象池工具类

    博客分类:
  • AS3
 
阅读更多

早在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);  

 

 

分享到:
评论

相关推荐

    Unity 工具类 之 简单的对象池管理类 ObjectPoolManager 实现

    Unity 工具类 之 简单的对象池管理类 ObjectPoolManager 实现 1、单例类,保证整个场景中只有一个类管理对象池; 2、把需要的对象以对象池形式管理起来,需要的时候 拿出来显示即可,不需要的时候隐藏以来即可; ...

    UE4 Actor对象池插件

    在这个场景中,"UE4 Actor对象池插件"是一个专门针对UE4设计的工具,用于优化游戏性能,特别是处理大量动态对象的创建和销毁。对象池是一种内存管理策略,它预先创建并存储一组对象,当需要时可以从池中获取,而不是...

    Http连接池工具类

    传统的HttpURLConnection并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。对于网络请求这种底层相对复杂的操作,个人以为如果有可用的其他方案,也没有必要自己去管理连接对象。 除了...

    对象池简单Demo(资源包)

    Unity还提供了一些内置的工具,如PoolManager,但通常开发者会根据项目需求定制自己的对象池系统。 三、对象池的实现步骤 1. **初始化对象池**:在游戏启动时或需要时,预先创建一定数量的对象实例,并将其禁用...

    对象池对象生成工具:Pool Spawner Pro v1.1

    该工具特别适合移动游戏,因为它的高效对象池机制能够减少电量消耗,使游戏运行更加流畅。 Pool Spawner Pro 通过对象池技术,避免了 Unity 内置的 Instantiate () 和 Destroy () 函数所带来的性能问题,因为对象池...

    对象池

    这个压缩包包含三个文件:`ObjectPool.java`、`Test.java`和`TestObject.java`,分别代表了对象池的实现、测试类以及一个用于测试的对象类。 `ObjectPool.java` 文件很可能实现了对象池的基本逻辑。它可能包括以下...

    apache对象池的实现

    在Java环境中,Apache Commons Pool库是实现对象池的常见工具,它提供了多种对象池实现,适用于不同场景的需求。 Apache Commons Pool库是一个通用的对象池服务,它提供了一个框架,使得开发者可以方便地为任何可...

    对象池&线程池&数据库连接池

    总的来说,对象池、线程池和数据库连接池是Java中提高系统性能和资源利用率的重要工具。它们通过复用对象和线程,减少了内存分配和系统调用,优化了系统的并发处理能力,对于大型、高并发的应用场景尤其重要。理解和...

    Unity做的对象池小案例

    在C#中,我们可以使用类和数据结构来实现对象池。首先,定义一个Pool类,它包含一个队列或列表来存储对象,以及方法来获取和归还对象。以下是一个基本的Pool类模板: ```csharp public class ObjectPool&lt;T&gt; where T...

    Apache common pool2 对象池

    Apache Commons Pool2 提供了一个通用的对象池接口 `PooledObjectFactory`,这个工厂类负责创建和管理池中的对象。开发者可以自定义实现该接口,以便为特定类型的对象创建和配置池。例如,如果你正在处理数据库连接...

    HttpUtils 发送http请求工具类(实例讲解)

    该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...

    http通用工具类

    2. **URL处理**:工具类应包含解析和构建URL的方法,以便正确处理URL编码和解码,防止URL注入攻击。 3. **请求头设置**:允许设置各种HTTP请求头,如Content-Type(定义请求体的数据类型)、Authorization(用于...

    4.mysql dbutils c3p0 缓存池工具类

    总结起来,"4.mysql dbutils c3p0 缓存池工具类"这个主题涉及了如何在Java项目中使用MySQL数据库,以及如何通过DBUtils和C3P0来简化数据库操作和管理数据库连接。DBUtils提供了一套实用的数据库操作API,而C3P0则...

    java个人开发工具类

    个人开发工具类可能包含连接池配置、键值操作(如设置、获取、删除)、列表、集合、哈希表以及有序集合的相关方法,帮助开发者快速实现与Redis的数据交互。 2. FastDFSClient: FastDFS是一个开源的高性能、轻量级...

    jdbc 工具类、帮助类

    4. **结果集处理**:工具类通常会包含处理ResultSet的方法,比如将结果集转换为List对象,或者封装成自定义的Java实体类。这使得数据的读取更加便捷。 5. **事务管理**:在数据库操作中,事务的正确性和一致性至关...

    各种数据库工具类

    首先,数据库工具类通常是封装了数据库连接池、SQL执行、结果集处理等功能的Java类库。例如,Apache的DBUtils和MyBatis都是广泛使用的开源工具。DBUtils提供了一个简单的API,用于执行SQL语句并处理结果,而MyBatis...

    java短信服务工具类

    Java短信服务工具类是开发过程中常见的一种实用组件,主要用于实现应用程序与短信服务提供商之间的交互。在Java编程中,这样的工具类通常包含了一系列方法,用于发送、接收和处理短信。下面我们将详细探讨Java短信...

    jsp工具类应用

    - 调用工具类时,确保所有必要的依赖已经被正确地引入和配置,如数据库驱动、连接池等。 - 对于涉及安全性(如SQL注入)的操作,应使用预编译的SQL语句(PreparedStatement)或其他安全措施。 通过上述步骤,我们...

    jedis工具类

    这个工具类的主要目的是在程序运行时自动读取配置文件(例如`redis.properties`),并根据配置创建和管理Redis连接池,类似于proxool这样的数据库连接池管理工具。 首先,让我们了解一下`Jedis`。Jedis是Java语言的...

    javaweb jdbc工具类.zip

    因此,JDBC工具类通常会包含数据库连接池(如C3P0、HikariCP或Apache DBCP)的配置和管理,以实现连接的复用,提高性能并减少系统开销。 2. **自动处理事务**:工具类可以封装开始事务、提交事务和回滚事务的逻辑,...

Global site tag (gtag.js) - Google Analytics