此包由与 Adobe Flex Builder 一同分发的配置代理使用,供您用来自定义配置代理或生成您自己的内存测试。可使用 startSampling() 方法和 Flash Player 调试版 9.0.115.0 或更高版本收集内存使用样本。然后使用 getSamples() 方法检索内存使用样本。样本可揭示运行中的应用程序在不同间隔中的内存使用。然后可使用 flash.sampler 包中的其它方法分析内存使用信息。

注意:如果您创建自己的自定义配置代理,请预加载代理 SWF 文件,方法是在 mm.cfg 文件中设置 PreloadSwf 属性:

PreloadSwf=C:/Documents and Settings/username/testingagent.swf?aparam=asetting

每个预加载的代理 SWF 文件都有自己的安全域,在与正在配置的主 SWF 文件不同的安全沙箱中运行。若要运行 flash.sampler 包的方法,代理 SWF 文件必须在 localTrusted 文件路径中(请参见 Flash Player 9 安全性白皮书)。

公共方法
 函数定义方
  
清除当前的 Sample 对象集合。
flash.sampler
  
返回 get 函数的执行次数。
flash.sampler
  
返回方法的执行次数。
flash.sampler
  
getMemberNames(o:Object, instanceNames:Boolean = false):Object
返回一个对象,其中包含指定对象的所有成员(包括私有成员)。
flash.sampler
  
返回收集的样本数。
flash.sampler
  
从上次采样会话中返回内存使用 Sample 实例的对象。
flash.sampler
  
返回 set 函数的执行次数。
flash.sampler
  
返回指定对象在与 Flash Player 9.0.115.0 或更高的调试版一起使用时在内存中的大小。
flash.sampler
  
检查以确定 get/set 函数是否定义了属性。
flash.sampler
  
立即停止采样过程。
flash.sampler
  
开始收集内存使用 Sample 对象的过程。
flash.sampler
  
结束收集内存使用 Sample 对象的过程,并释放采样过程的专用资源。
flash.sampler
函数详细信息
clearSamples()函数
public function clearSamples():void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

清除当前的 Sample 对象集合。通常在调用 getSamples() 并遍历 Sample 对象后调用此方法。仅适用于 Flash Player 调试版。

另请参见

getGetterInvocationCount()函数 
public function getGetterInvocationCount(obj:Object, qname:QName):Number

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

返回 get 函数的执行次数。在使用 getGetterInvocationCount() 之前使用 isGetterSetter() 验证是否具有 get/set 函数。仅适用于 Flash Player 调试版。

参数

obj:Object — 方法实例或类。
 
qname:QName — 如果 qname 为 undefined,则返回构造函数的迭代次数。

返回
Number — get 函数的执行次数。

另请参见

getInvocationCount()函数 
public function getInvocationCount(obj:Object, qname:QName):Number

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

返回方法的执行次数。如果参数 obj 为类并且参数 qnameundefined,则此方法返回构造函数的迭代次数。仅适用于 Flash Player 调试版。

参数

obj:Object — 方法实例或类。在方法实例不可用时,可以使用类来获取实例函数的调用计数。如果 objundefined,则此方法返回由 qname 命名的范围限于包的函数计数。
 
qname:QName — 如果 qname 为 undefined,则返回构造函数的迭代次数。

返回
Number — 方法的执行次数。

示例

package 
{
  public function exec3() {}

  import flash.sampler.*;
  import flash.system.*;
  import flash.display.Sprite;
  import flash.utils.*;
  public class getInvocationCountTest extends Sprite
    {
      public function getInvocationCountTest()
    {
      for(var i:int=0;i<10;i++)
        exec();
      for(var i:int=0;i<10;i++)
        exec2();
      for(var i:int=0;i<10;i++)
        exec3();

      // get exec QName
      var execName:QName;
          var name:QName;
      var fooName:QName;
      for each(name in getMemberNames(this)) {
          if(name.localName == "exec")
          execName = name;
          if(name.localName == "foo")
          fooName = name;
      }

      var exec2Name:QName;
      for each(name in getMemberNames(getInvocationCountTest)) {
          if(name.localName == "exec2")
          exec2Name = name;
      }

      // execute get/set
      foo = "bar";

      trace(isGetterSetter(this, fooName));
      trace(getSetterInvocationCount(this, fooName) == 1);
      trace(getGetterInvocationCount(this, fooName) == 0);

      foo;
      
      trace(getSetterInvocationCount(getInvocationCountTest, fooName) == 1);
      trace(getGetterInvocationCount(getInvocationCountTest, fooName) == 1);

      trace(getInvocationCount(this, execName) == 10);
      trace(getInvocationCount(getInvocationCountTest, execName) == 10);
      trace(getInvocationCount(getInvocationCountTest, exec2Name) == 10);
      trace(getInvocationCount(getInvocationCountTest, undefined) == 1);
    
      getTimer();
      getTimer();

      trace(getInvocationCount(undefined, new QName("", "trace")) == 9);
      trace(getInvocationCount(undefined, new QName("flash.utils", "getTimer")) == 2);
      trace(getInvocationCount(undefined, new QName("", "exec3")) == 10);

    }

      private function exec():void {}
      private static function exec2():void {}

      private function get foo():String { return "fo"; }
      private function set foo(s:String) { }
      
    }
}
getMemberNames()函数 
public function getMemberNames(o:Object, instanceNames:Boolean = false):Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

返回一个对象,其中包含指定对象的所有成员(包括私有成员)。然后可以遍历返回的对象以查看所有的值。此方法与 flash.utils.describeType() 方法类似,不过使用它还可以查看私有成员并跳过创建 XML 对象的中间步骤。仅适用于 Flash Player 调试版。

参数

o:Object — 要分析的对象。
 
instanceNames:Boolean (default = false) — 如果对象是类并且 instanceNames 为 true,则将 o 视为类的实例来报告实例名称而不是类的成员名称。

返回
Object — 一个对象,必须使用 for each..in 循环进行遍历以检索每个属性的 QName。

另请参见


示例

以下示例使用 getMemberNames() 方法分析对象并显示其成员的 buttonModefiltersdispatchEvent 属性。若要使用内存设置,需要安装 Flash Player 调试版 9.0.115.0 或更高版本。
package 
{
  import flash.sampler.*;
  import flash.system.*;
  import flash.display.Sprite;
  public class getMemberNamesTest extends Sprite
    {
      public function getMemberNamesTest()
    {
      var name_iter = getMemberNames(this);
      var o={};
      for each(var name:QName in name_iter) {
        o[name.localName] = "got it";
      }

      name_iter = getMemberNames(this);
      var count=0;
      for(var dum in name_iter) {
        count++;
      }
      trace(count == 1);

      // my member
      trace("buttonMode" in o);
      // inherited member
      trace("filters" in o);
      // inherited function
      trace("dispatchEvent" in o);

      var name_iter = getMemberNames(getMemberNamesTest, true);
      var o={};
      for each(var name:QName in name_iter) {
        o[name.localName] = "got it";
      }

      // my member
      trace("buttonMode" in o);
      // inherited member
      trace("filters" in o);
      // inherited function
      trace("dispatchEvent" in o);

    }
    }
}
getSampleCount()函数 
public function getSampleCount():Number

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

返回收集的样本数。仅适用于 Flash Player 调试版。

返回
Number — Sample 实例的迭代器。

另请参见

getSamples()函数 
public function getSamples():Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

从上次采样会话中返回内存使用 Sample 实例的对象。仅适用于 Flash Player 调试版。

返回
Object — Sample 实例的迭代器。

另请参见

getSetterInvocationCount()函数 
public function getSetterInvocationCount(obj:Object, qname:QName):Number

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

返回 set 函数的执行次数。在使用 getSetterInvocationCount() 之前使用 isGetterSetter() 验证是否具有 get/set 函数。仅适用于 Flash Player 调试版。

参数

obj:Object — 方法实例或类。
 
qname:QName — 如果 qname 为 undefined,则返回构造函数的迭代次数。

返回
Number — set 方法的执行次数。

另请参见

getSize()函数 
public function getSize(o:*):Number

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

返回指定对象在与 Flash Player 9.0.115.0 或更高的调试版一起使用时在内存中的大小。如果与非调试版的 Flash Player 一起使用,则此方法返回 0

参数

o:* — 要分析其内存使用量的对象。

返回
Number — 指定对象使用的内存字节计数。

示例

下面的示例使用 startSampling()pauseSampling 收集 Sample 对象。然后,示例针对 id 值和大小遍历 Sample 对象。在调用 System.gc() 停止当前过程后,示例将 deletedObjectSample 对象与原始 id 值进行比较并显示它们的大小。若要使用内存设置,需要安装 Flash Player 调试版 9.0.115.0 或更高版本。
package {
  import flash.sampler.*;
  import flash.system.*;
  import flash.display.Sprite;
  import flash.utils.Dictionary;
  public class deletedObjectSize extends Sprite {
    public function deletedObjectSize() {

      startSampling();
      var obj = {};
      pauseSampling();

      var id:Number;
      var sampleIter = getSamples();
      for each(var s:Sample in sampleIter) {
    id = s.id;
      }
      
      sampleIter = getSamples();
      var count=0;
      for(var dum in sampleIter) {
    count++;
      }
      trace(count == 1);

      var size:Number = getSize(obj);
      obj = undefined;

      startSampling();

      // force DRC
      for(var i:int=0;i<1000;i++)
    new Object();
      
      System.gc();

      pauseSampling();
      
      var sampleIter = getSamples();
      for each(var s:Sample in sampleIter) {
    //    trace(s);
    if(s is DeleteObjectSample && s.id == id) {
      trace(s.size == size);
    }      
      }       

    }
  }
}
isGetterSetter()函数 
public function isGetterSetter(obj:Object, qname:QName):Boolean

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

检查以确定 get/set 函数是否定义了属性。如果要对某一属性的 get/set 函数使用 getInvocationCount(),请首先调用 isGetterSetter() 以检查它是否为 get/set 函数,然后使用 getSetterInvocationCountgetGetterInvocationCount 来获取各自的计数。仅适用于 Flash Player 调试版。

参数

obj:Object — 方法实例或类。
 
qname:QName — 如果 qname 为 undefined,则返回构造函数的迭代次数。

返回
Boolean — 一个布尔值,指示 get/set 函数是否定义了该属性;如果是,则为 true,否则为 false

另请参见


示例

package 
{
  public function exec3() {}

  import flash.sampler.*;
  import flash.system.*;
  import flash.display.Sprite;
  import flash.utils.*;
  public class getInvocationCountTest extends Sprite
    {
      public function getInvocationCountTest()
    {
      for(var i:int=0;i<10;i++)
        exec();
      for(var i:int=0;i<10;i++)
        exec2();
      for(var i:int=0;i<10;i++)
        exec3();

      // get exec QName
      var execName:QName;
          var name:QName;
      var fooName:QName;
      for each(name in getMemberNames(this)) {
          if(name.localName == "exec")
          execName = name;
          if(name.localName == "foo")
          fooName = name;
      }

      var exec2Name:QName;
      for each(name in getMemberNames(getInvocationCountTest)) {
          if(name.localName == "exec2")
          exec2Name = name;
      }

      // execute get/set
      foo = "bar";

      trace(isGetterSetter(this, fooName));
      trace(getSetterInvocationCount(this, fooName) == 1);
      trace(getGetterInvocationCount(this, fooName) == 0);

      foo;
      
      trace(getSetterInvocationCount(getInvocationCountTest, fooName) == 1);
      trace(getGetterInvocationCount(getInvocationCountTest, fooName) == 1);

      trace(getInvocationCount(this, execName) == 10);
      trace(getInvocationCount(getInvocationCountTest, execName) == 10);
      trace(getInvocationCount(getInvocationCountTest, exec2Name) == 10);
      trace(getInvocationCount(getInvocationCountTest, undefined) == 1);
    
      getTimer();
      getTimer();

      trace(getInvocationCount(undefined, new QName("", "trace")) == 9);
      trace(getInvocationCount(undefined, new QName("flash.utils", "getTimer")) == 2);
      trace(getInvocationCount(undefined, new QName("", "exec3")) == 10);

    }

      private function exec():void {}
      private static function exec2():void {}

      private function get foo():String { return "fo"; }
      private function set foo(s:String) { }
      
    }
}
pauseSampling()函数 
public function pauseSampling():void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

立即停止采样过程。使用 startSampling() 重新启动采样过程。仅适用于 Flash Player 调试版。

另请参见

startSampling()函数 
public function startSampling():void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

开始收集内存使用 Sample 对象的过程。仅适用于 Flash Player 调试版。

另请参见


示例

下面的示例启动采样过程并遍历收集的对象。若要使用内存设置,需要安装 Flash Player 调试版 9.0.115.0 或更高版本。
package 
{
    import flash.sampler.*
    import flash.system.*
    import flash.display.Sprite
    public class startSampling extends Sprite
    {
        public function startSampling()
        {
            flash.sampler.startSampling();
            for(var i:int=0;i<1000;i++)
                new Object()
            trace(getSampleCount() > 0)
        }
    }
}
stopSampling()函数 
public function stopSampling():void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9.0.115.0

结束收集内存使用 Sample 对象的过程,并释放采样过程的专用资源。使用 startSampling() 启动采样过程。仅适用于 Flash Player 调试版。

另请参见