2009-12-09 64 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