Re: [情報] Object pool - 增加程式效能的技巧
我自己寫了一個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)
推
12/16 02:29, , 1F
12/16 02:29, 1F
※ 編輯: cjcat2266 來自: 61.228.88.104 (12/16 02:41)
→
12/16 02:41, , 2F
12/16 02:41, 2F
推
12/16 23:24, , 3F
12/16 23:24, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):