此包由与 Adobe Flash Builder 一同分发的配置代理使用,供您用来自定义配置代理或生成您自己的内存测试。可使用
startSampling()
方法和 Flash Player 调试版 9.0.115.0 或更高版本收集内存使用样本。然后使用
getSamples()
方法检索内存使用样本。样本可揭示运行中的应用程序在不同间隔中的内存使用情况。然后可使用
flash.sampler
包中的其他方法来分析内存使用信息。
注意:如果您创建自己的自定义配置代理,请通过在 mm.cfg 文件中设置 PreloadSwf
属性来预加载代理 SWF 文件:
PreloadSwf=C:/Documents and Settings/username/testingagent.swf?aparam=asetting
每个预加载的代理 SWF 文件都有自己的安全域,它们运行时所在的安全沙箱与正在接受概要分析的主 SWF 文件不同。若要运行 flash.sampler
包的方法,代理 SWF 文件必须在 localTrusted 文件路径中(请参阅 安全中心)。
公共方法
| 函数 | 由以下参数定义 |
---|
| |
清除当前的 Sample 对象集合。 | flash.sampler |
| |
返回 get 函数的执行次数。 | flash.sampler |
| |
返回方法的执行次数。 | flash.sampler |
| |
显示 Function 的词汇范围,以使捕获范围的对象(包括激活对象以及范围内对象)在被 Function 实例保留时对于分析器可见。 | flash.sampler |
| |
返回此字符串所关联的主字符串,或者如果此字符串不与其他字符串关联,则返回 null。 | flash.sampler |
| |
返回一个对象,其中包含指定对象的所有成员(包括私有成员)。 | flash.sampler |
| |
返回收集的样本数。 | flash.sampler |
| |
从上次采样会话中返回内存使用 Sample 实例的对象。 | flash.sampler |
| |
从 closure 方法返回保存的“this”,通常无法从 AS 看到。 | flash.sampler |
| |
返回 set 函数的执行次数。 | flash.sampler |
| |
当所指定对象用于 Flash Player 9.0.115.0 或更高调试器版本时,返回该对象所占用的内存大小。 | flash.sampler |
| |
检查以确定 get/set 函数是否定义了属性。 | flash.sampler |
| |
立即停止采样过程。 | flash.sampler |
| |
如果应该为来自 Flash Player 的内部分配创建 NewObjectSamples,则告知取样器。 | flash.sampler |
| |
为取样器设置回调函数 - 在示例流将要用尽时调用此函数。 | flash.sampler |
| |
开始收集内存使用 Sample 对象的过程。 | flash.sampler |
| |
结束收集内存使用 Sample 对象的过程,并释放采样过程的专用资源。 | flash.sampler |
public function clearSamples():void
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
清除当前的 Sample 对象集合。通常在调用 getSamples()
并遍历 Sample 对象后调用此方法。仅适用于 Flash Player 调试器版。
相关 API 元素
public function getGetterInvocationCount(obj:Object, qname:QName):Number
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
返回 get 函数的执行次数。在使用 getGetterInvocationCount()
之前使用 isGetterSetter()
验证是否具有 get/set 函数。仅适用于 Flash Player 调试器版。
参数
| obj:Object — 方法实例或类。
|
|
| qname:QName — 如果 qname 为 undefined ,则返回构造函数的迭代次数。
|
返回相关 API 元素
public function getInvocationCount(obj:Object, qname:QName):Number
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
返回方法的执行次数。如果参数 obj
为类并且参数 qname
为 undefined
,则此方法返回构造函数的迭代次数。仅适用于 Flash Player 调试器版。
参数
| obj:Object — 方法实例或类。在方法实例不可用时,可以使用类来获取实例函数的调用计数。如果 obj 为 undefined ,则此方法返回由 qname 命名的范围限于包的函数计数。
|
|
| qname:QName — 如果 qname 为 undefined ,则返回构造函数的迭代次数。
|
返回
示例 (
如何使用本示例 )
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) { }
}
}
public function getLexicalScopes(obj:Function):Array
显示 Function 的词汇范围,以使捕获范围的对象(包括激活对象以及范围内对象)在被 Function 实例保留时对于分析器可见。
参数
返回 public function getMasterString(str:String):String
返回此字符串所关联的主字符串,或者如果此字符串不与其他字符串关联,则返回 null。例如,如果调用 String.substr()
,出于效率考虑,返回的字符串常常仅作为一个指针,实际实现到原始字符串中。通常使用过程中,这些实现细节对于用户是不可见的;但是,在使用分析器分析程序的内存占用时,可能会出现令人困惑的情形,因为此字符串可能显示为所占用的内存比字符串值所需要的内存要少。此外,字符串可能单独保存在内存中,因为它是其他字符串的主字符串。getMasterString()
可使分析器向用户显示字符串相关性的准确图表。
参数
返回 | String — 传入字符串所关联的字符串,或者如果传入字符串不与其他字符串关联,则为 null。
|
public function getMemberNames(o:Object, instanceNames:Boolean = false):Object
运行时版本: | 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。
|
相关 API 元素
示例 (
如何使用本示例 )
以下示例使用
getMemberNames()
方法分析对象并显示其成员的
buttonMode
、
filters
和
dispatchEvent
属性。为了使用内存设置,需要安装 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);
}
}
}
public function getSampleCount():Number
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
返回收集的样本数。仅适用于 Flash Player 调试器版。
返回相关 API 元素
public function getSamples():Object
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
从上次采样会话中返回内存使用 Sample 实例的对象。仅适用于 Flash Player 调试器版。
返回相关 API 元素
public function getSavedThis(obj:Function):Object
从 closure 方法返回保存的“this”,通常无法从 AS 看到。
参数
返回 | Object — MethodClosure 的“this”对象
|
public function getSetterInvocationCount(obj:Object, qname:QName):Number
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
返回 set 函数的执行次数。在使用 getSetterInvocationCount()
之前使用 isGetterSetter()
验证是否具有 get/set 函数。仅适用于 Flash Player 调试器版。
参数
| obj:Object — 方法实例或类。
|
|
| qname:QName — 如果 qname 为 undefined ,则返回构造函数的迭代次数。
|
返回相关 API 元素
public function getSize(o:*):Number
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
当所指定对象用于 Flash Player 9.0.115.0 或更高调试器版本时,返回该对象所占用的内存大小。如果与非调试器版的 Flash Player 一起使用,则此方法返回 0
。
参数
返回
示例 (
如何使用本示例 )
下面的示例使用
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);
}
}
}
}
}
public function isGetterSetter(obj:Object, qname:QName):Boolean
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
检查以确定 get/set 函数是否定义了属性。如果要对某一属性的 get/set 函数使用 getInvocationCount()
,请首先调用 isGetterSetter()
以检查它是否为 get/set 函数,然后使用 getSetterInvocationCount
或 getGetterInvocationCount
来获取各自的计数。仅适用于 Flash Player 调试器版。
参数
| obj:Object — 方法实例或类。
|
|
| qname:QName — 如果 qname 为 undefined ,则返回构造函数的迭代次数。
|
返回 | Boolean — 一个布尔值,表示 get/set 函数是否定义了该属性;如果是,则为 true ,否则为 false 。
|
相关 API 元素
示例 (
如何使用本示例 )
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) { }
}
}
public function pauseSampling():void
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
立即停止采样过程。使用 startSampling()
重新启动采样过程。仅适用于 Flash Player 调试器版。
相关 API 元素
public function sampleInternalAllocs(b:Boolean):void
如果应该为来自 Flash Player 的内部分配创建 NewObjectSamples,则告知取样器。如果设置为 true,则各个分配都将生成一个 NewObjectSample。这些内部分配将不包含类型或对对象的引用。它们将包含触发分配的 ActionScript 堆栈。默认值为 false,这将只收集对 ActionScript 对象的分配。
参数
public function setSamplerCallback(f:Function):void
为取样器设置回调函数 - 在示例流将要用尽时调用此函数。这应用于在填充样本缓冲区之前处理样本。将在调用回调之前调用 pauseSampling 并在执行回调之后调用 startSampling。
参数
public function startSampling():void
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
开始收集内存使用 Sample 对象的过程。仅适用于 Flash Player 调试器版。
相关 API 元素
示例 (
如何使用本示例 )
下面的示例启动采样过程并遍历收集的对象。为了使用内存设置,需要安装 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)
}
}
}
public function stopSampling():void
运行时版本: | AIR 1.0, Flash Player 9.0.115.0 |
结束收集内存使用 Sample 对象的过程,并释放采样过程的专用资源。使用 startSampling()
启动采样过程。仅适用于 Flash Player 调试器版。
相关 API 元素
© 2015 Adobe Systems Incorporated. All rights reserved.
Tue Jun 12 2018, 11:20 AM Z