2009-12-09 38 views

回答

3

我敢肯定有一個程序在那裏,還在尋找自己,但我found this on a forum

大多數AS3初學者有編程的東西,然後聽說了內存泄漏。首先,我將介紹如何檢測和修復先前存在的代碼中的泄漏,然後討論開始編程時採取的預防性措施。

那麼你怎麼知道你的程序有問題?最清楚的方式是它是否崩潰,但這是非常不切實際的。幸運的是,在AS3中,我們有一個名爲System的對象,其屬性告訴我們關於Flash運行的條件。例如,System.totalMemory是正在運行程序的Flash Player實例使用的計算機內存量。不同的平臺以不同的方式確定System.totalMemory的價值,因此我建議您在測量其值時只能運行一個Flash Player實例。

package { 

    import flash.utils.Timer; 
    import flash.system.System; 

    public class SpitMem { 
     var t:Timer = new Timer(0); 
     var n:int, lastN:int; 

     public function SpitMem():void { 
      t.addEventListener("timer", spit2, false, 0, true); 
     } 

     private function spit1():void { 
      trace(System.totalMemory); 
     } 

     private function spit2():void { 
      n = System.totalMemory; 
      if (n != lastN) 
       trace(n); 
      lastN = n; 
     } 
    } 
} 

如果您創建上述SpitMem類的實例,並運行你的代碼,你可以在輸出窗口程序的內存使用情況觀察的波動。儘管如此,這是很多信息,而且在這種格式下,它無法讓您清楚地瞭解您的程序如何使用其內存。 (注意上面介紹的spit1()和spit2()之間的不同之處,spit2()不會輸出System.totalMemory,如果它沒有改變的話。更有用)。

如果您在電子表格程序中製作數據圖表,您會注意到它似乎總是在增加。這並不意味着你有內存泄漏。 Flash的內置內存管理允許某些類型的數據放置,直到有適當的時間擺脫它爲止。這被稱爲垃圾收集,對於大多數Flash項目來說,它會導致你的內存積累,然後下降。這被稱爲鋸齒圖,這是完全正常的。

1

與Flash Player 10.1的預覽的發佈版本,Adobe公司推出了,做內存監視你的組件:Memory Monitoring Component

+0

這看起來有用,但我注意到,當我測試工具(.fla)時,內存不斷上升,然後又回落,並不斷重複..任何想法爲什麼? – 2009-12-17 01:05:26

+1

我懷疑這是一種正常行爲:記憶力上升,車庫收集器清理,記憶力下降,重複。 – 2012-06-20 20:50:28

2

這是ActionScript 3的內存分析很好的工具和分析http://demonsterdebugger.com/

+0

它有內存監視器,它是非常有用的查找內存泄漏。 – Sat 2013-07-30 12:47:00