惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
T
Threat Research - Cisco Blogs
小众软件
小众软件
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
C
Cyber Attacks, Cyber Crime and Cyber Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tailwind CSS Blog
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
博客园 - 【当耐特】
C
Cybersecurity and Infrastructure Security Agency CISA
Hugging Face - Blog
Hugging Face - Blog
The Cloudflare Blog
The Last Watchdog
The Last Watchdog
Simon Willison's Weblog
Simon Willison's Weblog
T
Threatpost
S
Secure Thoughts
O
OpenAI News
P
Proofpoint News Feed
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
Scott Helme
Scott Helme
T
Tenable Blog
A
Arctic Wolf
L
LINUX DO - 热门话题
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V
Visual Studio Blog
Hacker News: Ask HN
Hacker News: Ask HN
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
博客园 - Franky
WordPress大学
WordPress大学
Know Your Adversary
Know Your Adversary
博客园_首页
雷峰网
雷峰网
IT之家
IT之家
PCI Perspectives
PCI Perspectives
L
LINUX DO - 最新话题
H
Heimdal Security Blog

博客园 - appleseed

搭建一个typescript下的webgl写代码环境。 Unity3d 小游戏从入门到??? Unity3d 小游戏详解 linux随笔 使用public/private key让putty(ssh)自动登录(以及linux上使用密钥做ssh自动登陆) texturetool 3d专业术语 Molehill 转 降频的时候处理方法 [转] 使用Duff's Device算法优化for循环 转 [教程] [Lii]最小帧速下的强制渲染——自制图像引擎的同学看过来 - appleseed AI笔记 启动GPU加速的方法 恋爱秘籍 .... ..... AS3位运算
as3对象池研究
appleseed · 2010-01-27 · via 博客园 - appleseed

为什么使用对象池?

   ok,我们先来看一个例子:假设游戏当中,玩家按下鼠标,那么游戏场景中出现一个美女A,代码是var A:美女A=new 美女A();addChild(A);  放开鼠标美女被清除,

代码是:A.dispose();A=null;如果某个玩家不停地点击鼠标,那么我们的代码将不停的NEW 美女A()而NEW 美女A()其实是很费时消耗系统性能这是问题就来了,假设NEW 美女A()消耗了2KB内存,玩家疯狂点一千次,那么我们的美女类就不断地创建,清除,创建,清除,那么我们的游戏内存直接增加1000*2kb,因为FLASH是托管的GC清理资源,具体什么时候清理只有GC知道,那么我们的游戏的性能就.........可是如果我们有了对象池那又是一种什么情况呢?首先美女将被new 美女A() 然后美女A被放入到对象池中存放,当鼠标按下的时候我们将执行:ObjectPool. borrowObject():取得美女A,当鼠标按下我们执行ObjectPool.returnObject():这样子美女又被放入到对象池中存起来了,执行一千次,由于使用对象池取得美女A和放入美女A中不涉及到对象的创建和销毁,所以我们的游戏不会导致系统资源的增加。因为美女A被访到内存池中存储起来重复利用了。

了解对象池

对象池的工作原理:

    对象池的工作原理的核心有两点:使用和缓存,即对于那些被频繁使用的对象,在使用完后,不立即将它们释放,而是将它们缓存起来,以供后续的应用程序重复使用,从而减少创建对象和释放对象的次数,进而改善应用程序的性能。

优点:能快速取出对象节省了NEW对象所产生的cpu,时间的消耗。能很好的控制内存的占用,使用时从对象池取出,使用完毕放回。中间不涉及到对象销毁创建,所以内存占用是定量的。同时如果对象池提前

缺点:对象池同样消耗new同样对象所消耗的时间,对象池从创建到结束消耗定量的内存。对象池只适合大量的对象需要被重复创建使用销毁创建使用销毁的情况。非提前初始化式内存池,缓存as值类型的对象如:Point反而产生更大的消耗。

 要实现一个对象池,一般会涉及到以下的几个类:

 目标对象(SomeObject)类

     该类就是程序中频繁使用的对象。

 对象池(ObjectPool)类

    该类主要用于管理对象的借出和归还,并通知对象池完成相应的工作。它至少包含两个方法:

  borrowObject():用于从池中借出对象;

  returnObject():将对象归还到池中;

下面献上的代码:

代码

package wingox.pool {
    import flash.utils.Dictionary;
/**
     * @version 20100315
     * @author BrightLi
     
*/
    
public class ObjectPool {private static var _pool : Dictionary = new Dictionary(true);private var _template : Class;private var _list : Array;public function ObjectPool(value : Class) {
            _template 
= value;
            _list 
= new Array();
        }
public function borrowObject() : Object {
            
if(_list.length > 0) {
                
return _list.shift();
            }
            
return new _template();
        }
public function returnObject(value : Object) : void {
            _list.push(value);
        }
public static function getPool(value : Class) : ObjectPool {
            
if(!_pool[value]) {
                _pool[value] 
= new ObjectPool(value);
            }
            
return _pool[value];
        }
    }
}