此包由与 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 |
| | 返回一个对象,其中包含指定对象的所有成员(包括私有成员)。 | 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 |
public function clearSamples():void
运行时版本: | AIR 1.0 Flash Player 9.0.115.0 |
清除当前的 Sample 对象集合。通常在调用 getSamples()
并遍历 Sample 对象后调用此方法。仅适用于 Flash Player 调试版。
另请参见
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 ,则返回构造函数的迭代次数。
|
返回另请参见
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 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。
|
另请参见
示例
以下示例使用
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 调试版。
返回另请参见
public function getSamples():Object
运行时版本: | AIR 1.0 Flash Player 9.0.115.0 |
从上次采样会话中返回内存使用 Sample 实例的对象。仅适用于 Flash Player 调试版。
返回另请参见
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 ,则返回构造函数的迭代次数。
|
返回另请参见
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 。
|
另请参见
示例
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 调试版。
另请参见
public function startSampling():void
运行时版本: | 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)
}
}
}
public function stopSampling():void
运行时版本: | AIR 1.0 Flash Player 9.0.115.0 |
结束收集内存使用 Sample 对象的过程,并释放采样过程的专用资源。使用 startSampling()
启动采样过程。仅适用于 Flash Player 调试版。
另请参见
© 2004-2008 Adobe Systems Incorporated. All rights reserved.
Sun Dec 14 2008, 10:46 PM -08:00