作者cjcat2266 (CJ Cat)
看板Flash
標題Re: [情報] Object pool - 增加程式效能的技巧
時間Tue Dec 16 02:22:57 2008
我自己寫了一個Pool class
然後做了一個小實驗
結果發現
先一口氣大量宣告Sprite到pool裡面,以供未來提用
的確比每次要用到新的Sprite之後才new一個出來快非常多
以下面的例子來說
import idv.cjcat.ds.*;
var count:int = 10000;
//使用Pool class
var p:Pool = new Pool(Sprite, count);
var i:int;
for (i = 0; i < count; i++) addChild(p.get() as Sprite);
//不使用Pool class
for (i = 0; i < count; i++) addChild(new Sprite());
利用trace()和getTimer()
我得到兩種將10000個Sprite加到場景上的方法所需的時間
使用我的Pool class花了2220毫秒
而不使用的話則花了9797毫秒
差了超過四倍
不只如此
如果將使用過的物件用recycle()丟回pool再存起來
以後再提取這些物件
這樣一來,兩種方法的執行時間又差更多了
(改成生成6000個Sprite,因為生成10000個Sprite不用Pool會花太多時間)
var count:int = 6000;
//使用Pool
var p:Pool = new Pool(Sprite, count);
var i:int;
for (i = 0; i < count; i++) addChild(p.get() as Sprite);
for (i = 0; i < count; i++) p.recycle(removeChildAt(0));
for (i = 0; i < count; i++) addChild(p.get() as Sprite);
//不使用Pool
for (i = 0; i < count; i++) addChild(new Sprite());
for (i = 0; i < count; i++) removeChildAt(0);
for (i = 0; i < count; i++) addChild(new Sprite());
利用trace()和getTimer()得到的執行時間
使用Pool的方法花了1297毫秒
不使用Pool的話則花了10151毫秒
差了快要10倍!
看來Object pool的威力的確不容小覷...
P.S. 我的Pool class可以在最新的CJLibrary CS4中找到
http://code.google.com/p/cjlibrarycs4
--
CJ Cat = Croa'J Cat = Cockroach Cat = 西街凱特 = 蜚蠊貓 = 蟑螂貓
Blog
http://cjcat.blogspot.com
Gallery
http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop - 阿多比閃光(Adobe Flash)研討區
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.88.104
※ 編輯: cjcat2266 來自: 61.228.88.104 (12/16 02:26)
※ 編輯: cjcat2266 來自: 61.228.88.104 (12/16 02:41)
→ cjcat2266:感謝,已修正 :) 12/16 02:41
推 pankk:效能差別真明顯 12/16 23:24