[情報] CJSignals快速處理陣列的技巧

看板Flash作者 (CJ Cat)時間15年前 (2010/07/08 14:09), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/2 (看更多)
這篇文章講解了CJSignals改進AS3 Signals效能的技巧 只要你需要大量且快速地對陣列加入、移除物件 就可以考慮使用這招來大幅增進效能 Blog本文 http://bit.ly/cZiCsm 當一個listener被加入陣列 一個對應的ListenerData物件就會被生成 這個物件含有listener的reference 和在陣列中的index 除了陣列以外,還有一些輔助物件 dictionary - 用來對應listener和ListenerData物件 i - 用來儲存"第一個null元素"的index用 1. 加入物件 在陣列的i位置存入物件,並且++i 使得i保持"第一個null元素的index"的身分 當陣列滿了,就把陣列大小加倍 讓"尾巴"多出更多的null元素空間 2. 移除物件 當處於j位置的物件要被移除,會先 --i 於是i會指在"最後一個非null元素" j位置的值會被i位置的值取代 然後再把i位置的值設成null 使得i仍保持"第一個null元素的index"的身分 3. 排序 加入或移除元素的時候將一個boolean flag設成true 到了真的需要重新排序的時間點才進行排序,然後把flag設為false 而非每次加入或移除元素的時候就排序 例如CJSignals的排序時間點是"發出事件"或者"存取listener陣列" 內建的event system很有可能就是每次add/remove listener就馬上排序 才導致效能嚴重低落 以上 Rusher也是用這個技巧來有效管理active components陣列 所以就算大量且頻繁的加入和移除物件,也不會拖垮效能 -- 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: 118.168.27.51 ※ 編輯: cjcat2266 來自: 118.168.27.51 (07/08 14:10)

07/08 14:28, , 1F
頭推~原來rusher中有這個東西阿= ="........
07/08 14:28, 1F

07/08 14:55, , 2F
推 ~ 不過太深奧了一下子無法理解阿@@"
07/08 14:55, 2F
文章代碼(AID): #1CDMksUK (Flash)
文章代碼(AID): #1CDMksUK (Flash)