2014-01-21 60 views
3

好吧,顯然使用事件處理非常方便,但顯然也可以通過構圖實現相同的效果。就像我可以派發要在另一個對象的上下文中接收的事件一樣,我可以包含另一個對象並直接操作它。AS3:事件效率低下嗎?

現在,事件驅動的方法當然更有條理。我試圖優化一個程序,雖然我看到了一些性能問題,但是想知道消除使用事件可能會帶給我多大的幫助。任何指導性的智慧感謝!

回答

0
+0

這看起來不錯,在語法上,但性能增益在哪裏? –

+0

看看幾頁。 [Signals vs Events](https://www.google.co.uk/search?q=as3+signals+vs+events&rlz=1C1CHFX_en-GBGB536GB536&oq=as3+events+ver&aqs=chrome.1.69i57j0j69i60l3.9443j0j7&sourceid=chrome&espv=210&es_sm = 93&ie = UTF-8) – 3vilguy

+0

也只是使用回調函數,視情況而定。我用過兩個。 – Panzercrisis

1

的原因事件有效率不高的聲譽是因爲:

  • 構造對象被認爲是緩慢的。
  • A 事件對象是每次調度事件時構造的。

在一個場景中,有很多對象調度許多事件,這顯然會給每個幀構造許多很多對象的結果。

有了這些信息,您可以輕鬆保留事件模型的便利性,同時大大減輕Event對象的構造。一些方法可能包括:

  • 爲Event對象實現對象池。
  • 爲事件創建並使用單個實例,這些實例的意義不足以需要獨立性,或者一次不止需要實例在多個地方不需要。

這些方法顯然涉及到創建自己的事件模型,並且不能影響現有模型與內置對象的工作方式。

+0

通過對象池,您的意思是創建一系列將被使用的Event對象,並且一遍又一遍地重複使用同一個對象?如果是這樣,你會建議把它們保持在一個靜態常量中,比如說,在某種幫助類中,或者在類中使用它們嗎? –

+0

@JS總體思路是創建一個'Pool'類,它將保留一個'回收'對象列表。該池定義了最大池大小,並具有一個getter,它將從池中返回一個對象,或者創建一個新對象,並在該對象池爲空時返回該對象。 – Marty

+0

這是有道理的。你會推薦使用一個向量作爲一個實例變量,併爲每個要存儲的數據類型設置一個唯一的Pool類,那麼使用你提到的最大尺寸就可以將底層元素移出並保持最大內存使用率? –