<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Handy Code &#187; 编程</title>
	<atom:link href="http://handylee.com/category/program/feed/" rel="self" type="application/rss+xml" />
	<link>http://handylee.com</link>
	<description>Handy&#039;s Code Blog</description>
	<lastBuildDate>Fri, 15 Jul 2011 06:05:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>（ZT）AS3 对象池 研究</title>
		<link>http://handylee.com/2011/03/%ef%bc%88zt%ef%bc%89as3-%e5%af%b9%e8%b1%a1%e6%b1%a0-%e7%a0%94%e7%a9%b6/</link>
		<comments>http://handylee.com/2011/03/%ef%bc%88zt%ef%bc%89as3-%e5%af%b9%e8%b1%a1%e6%b1%a0-%e7%a0%94%e7%a9%b6/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 02:38:46 +0000</pubDate>
		<dc:creator>Handy</dc:creator>
				<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://handylee.com/?p=208</guid>
		<description><![CDATA[原文： http://www.cnblogs.com/appleseed/archive/2010/01/27/1657691.html http://www.taoshaw.com/taoshaw/article.asp?id=1913 http://www.richardlord.net/blog/object-pool-class http://code.google.com/p/bigroom/wiki/ObjectPool 为什么使用对象池？ 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()：将对象归还到池中； 其他： flash player中有两个开销比较大的操作：对象的创建(object creation)和垃圾回收(garbage collection)。如果我们把不需的对象存放到一个对象池，当需要同类型的对象时直接从对象池里面获取。这样可以减少“对象的创建”，垃圾回收机制 对象池里也不会工作，从而减少开销。 用法： 从ObjectPool中获取一个SomeClass的实例： 程 序代码 var obj:SomeClass = ObjectPool.getObject( SomeClass ); 当你不 [...]]]></description>
		<wfw:commentRss>http://handylee.com/2011/03/%ef%bc%88zt%ef%bc%89as3-%e5%af%b9%e8%b1%a1%e6%b1%a0-%e7%a0%94%e7%a9%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

