看板 Flash 關於我們 聯絡資訊
我自己寫了一個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)
shingoliang:http://code.google.com/p/cjlibrarycs4 少了le :P 12/16 02:29
※ 編輯: cjcat2266 來自: 61.228.88.104 (12/16 02:41)
cjcat2266:感謝,已修正 :) 12/16 02:41
pankk:效能差別真明顯 12/16 23:24