flash.samplerStackFrame StackFrame クラスは、関数を含むデータブロックのプロパティへのアクセスを提供します。Object StackFrame クラスは、関数を含むデータブロックのプロパティへのアクセスを提供します。Flash Player デバッグ版のみ。 toString StackFrame をそのプロパティのストリングに変換します。StackFrame オブジェクトの name プロパティを含むストリングです。必要に応じて、file プロパティと line プロパティも含まれます(SWF ファイルがデバッグ中の場合)。Flash Player デバッグ版のみ。 String StackFrame をそのプロパティのストリングに変換します。 file デバッグ中の SWF ファイルのファイル名です。String デバッグ中の SWF ファイルのファイル名です。 Flash Player デバッグ版のみ。 line デバッグ中の SWF ファイル内の関数の行番号です。uint デバッグ中の SWF ファイル内の関数の行番号です。 Flash Player デバッグ版のみ。 name スタックフレームの関数名です。String スタックフレームの関数名です。 Flash Player デバッグ版のみ。 scriptID プロファイリングされているアプリケーション内のスクリプト関数の ID。Number プロファイリングされているアプリケーション内のスクリプト関数の ID。 NewObjectSample NewObjectSample クラスは、getSamples() ストリーム内で作成されたオブジェクトを表します。flash.sampler:Sample NewObjectSample クラスは、getSamples() ストリーム内で作成されたオブジェクトを表します。 Flash Player デバッグ版のみ。 次の例では、Sample オブジェクトの stack プロパティと time プロパティを使用してメモリサンプルを収集します。 このサンプルには、NewObjectSample オブジェクト(newSamples 配列)、DeleteObjectSample オブジェクト(delSamples 配列)および CPU メモリサンプルオブジェクト(cpuSamples 配列)が含まれます。メモリプロファイラーを使用するには、Flash Player デバッグ版の 9.0.115.0 以降がインストールされている必要があります。 package { import flash.sampler.* import flash.system.* import flash.utils.* import flash.display.Sprite public class sampleTypes extends Sprite { var b:Boolean = true public function sampleTypes() { flash.sampler.startSampling(); for(var i:int=0;i<10000;i++) new Object(); var cpuSamples:Array=[]; var newSamples:Array=[]; var delSamples:Array=[]; var ids:Array=[] var lastTime:Number=0; for each(var s:Sample in getSamples()) { assert(s.time > 0); // positive assert(Math.floor(s.time) == s.time, s.time); // integral assert(s.time >= lastTime, s.time + ":" + lastTime); // ascending assert(s.stack == null || s.stack is Array) if(s.stack) { assert(s.stack[0] is StackFrame); assert(s.stack[0].name is String); } if(s is NewObjectSample) { var nos = NewObjectSample(s); assert(s.id > 0, s.id); assert(s.type is Class, getQualifiedClassName(s.type)); newSamples.push(s); ids[s.id] = "got one"; } else if(s is DeleteObjectSample) { var dos = DeleteObjectSample(s); delSamples.push(s); assert(ids[dos.id] == "got one"); } else if(s is Sample) cpuSamples.push(s); else { assert(false); } lastTime = s.time; } trace(b) trace(newSamples.length > 0) trace(cpuSamples.length > 0) trace(delSamples.length > 0) } private function assert(e:Boolean, mess:String=null):void { b = e && b; if(true && !e) { if(mess) trace(mess); trace(new Error().getStackTrace()); } } } } flash.sampler.getSamples()type getSamples() ストリーム内で作成されたオブジェクトに対応する Class オブジェクトです。Class getSamples() ストリーム内で作成されたオブジェクトに対応する Class オブジェクトです。 Flash Player デバッグ版のみ。 object NewObjectSample オブジェクトです(まだ存在している場合)。 NewObjectSample オブジェクトです(まだ存在している場合)。オブジェクトがガベージコレクションによって収集されている場合、このプロパティは undefined であり、対応する DeleteObjectSample が存在します。 Flash Player デバッグ版のみ。 flash.sampler.DeleteObjectSamplesize NewObjectSample オブジェクトのサイズ。Number NewObjectSample オブジェクトのサイズ。オブジェクトがガベージコレクションによって収集されている場合、このプロパティは undefined であり、対応する DeleteObjectSample が存在します。 Flash Player デバッグ版のみ。 flash.sampler.DeleteObjectSampleclearSamples Sample オブジェクトの現在のセットをクリアします。 Sample オブジェクトの現在のセットをクリアします。このメソッドは通常、getSamples() を呼び出して Sample オブジェクトを繰り返し処理した後に呼び出します。 Flash Player デバッグ版のみ。 getSamples()getGetterInvocationCount get 関数が実行された回数を返します。get メソッドが実行された回数です。 NumberobjObjectメソッドインスタンスまたはクラスです。 qnameQNameqname が undefined の場合は、コンストラクター関数の繰り返し回数を返します。 get 関数が実行された回数を返します。isGetterSetter() を使用して get/set 関数があることを確認してから getGetterInvocationCount() を使用してください。 Flash Player デバッグ版のみ。 isGetterSetter()getInvocationCount()getInvocationCount メソッドが実行された回数を返します。メソッドが実行された回数です。 NumberobjObjectメソッドインスタンスまたはクラスです。メソッドインスタンスが使用できない場合は、クラスを使用してインスタンス関数の呼び出し回数を取得できます。objundefined の場合、このメソッドは qname で名前が指定されたパッケージスコープ関数の回数を返します。 qnameQNameqname が undefined の場合は、コンストラクター関数の繰り返し回数を返します。 メソッドが実行された回数を返します。パラメーター obj が Class で、パラメーター qnameundefined の場合、このメソッドはコンストラクター関数の繰り返し回数を返します。 Flash Player デバッグ版のみ。 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) { } } } getLexicalScopes 関数のレキシカルスコープを公開して、関数インスタンスで保持されている間、キャプチャされたスコープオブジェクト(アクティベーションオブジェクトとスコープを含む)が、プロファイラーによって表示されるようにします。レキシカルスコープ要素を含んでいる配列 ArrayobjFunction関数 関数のレキシカルスコープを公開して、関数インスタンスで保持されている間、キャプチャされたスコープオブジェクト(アクティベーションオブジェクトとスコープを含む)が、プロファイラーによって表示されるようにします。 getMasterString このストリングが依存しているマスターストリングを返します。このストリングが他のストリングに依存していない場合は null を返します。渡されたストリングが依存しているストリングです。渡されたストリングが他のストリングに依存していない場合は null です。 StringstrStringストリングです。 このストリングが依存しているマスターストリングを返します。このストリングが他のストリングに依存していない場合は null を返します。例えば、String.substr() を呼び出すと、返されたストリングは、効率性のために、通常、元のストリングへのポインターとして実装されます。通常の使用では、実装に関する詳細はユーザーには表示されませんが、プロファイラーを使用してプログラムのメモリの消費量を分析すると、混乱が生じる場合があります。ストリングが消費しているメモリが、そのストリングの値に必要なメモリ量よりも少なく示される可能性があるからです。さらに、ストリングは、他のストリングのマスターなので、メモリだけに保持される場合があります。getMasterString() を使用すると、プロファイラーによって、ストリングの依存性の正確なグラフをユーザーに示すことができます。 getMemberNames 指定されたオブジェクトのすべてのメンバー(プライベートメンバーを含む)を含むオブジェクトを返します。各プロパティの QNames を取得するために for each..in ループで繰り返し処理するオブジェクトです。 ObjectoObject解析するオブジェクトです。 instanceNamesBooleanfalseオブジェクトが Class の場合、instanceNames に true を指定すると、o がクラスのメンバー名ではなくクラスのインスタンスであるかのようにインスタンス名が報告されます。 指定されたオブジェクトのすべてのメンバー(プライベートメンバーを含む)を含むオブジェクトを返します。返されたオブジェクトを繰り返し処理してすべての値を確認できます。このメソッドは flash.utils.describeType() メソッドと似ていますが、プライベートメンバーも確認することが可能で、XML オブジェクトを作成するという中間手順を省略できます。 Flash Player デバッグ版のみ。 次の例では、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); } } } flash.utils.describeType()for each..ingetSampleCount 収集されたサンプルの数を返します。Sample インスタンスのイテレータです。 Number 収集されたサンプルの数を返します。 Flash Player デバッグ版のみ。 flash.sampler.SamplegetSamples 最後のサンプリングセッションからメモリ使用状況 Sample インスタンスのオブジェクトを返します。Sample インスタンスのイテレータです。 Object 最後のサンプリングセッションからメモリ使用状況 Sample インスタンスのオブジェクトを返します。 Flash Player デバッグ版のみ。 flash.sampler.SamplegetSavedThis 通常 AS で表示できないメソッドクロージャから、保存された "this" を返します。MethodClosure の "this" であるオブジェクト。 ObjectobjFunctionMethodClosure インスタンス。 通常 AS で表示できないメソッドクロージャから、保存された "this" を返します。 getSetterInvocationCount set 関数が実行された回数を返します。set メソッドが実行された回数です。 NumberobjObjectメソッドインスタンスまたはクラスです。 qnameQNameqname が undefined の場合は、コンストラクター関数の繰り返し回数を返します。 set 関数が実行された回数を返します。isGetterSetter() を使用して get/set 関数があることを確認してから getSetterInvocationCount() を使用してください。 Flash Player デバッグ版のみ。 isGetterSetter()getInvocationCount()getSize Flash Player 9.0.115.0 以降のデバッグ版で使用した場合、指定されたオブジェクトのメモリ内サイズを返します。指定されたオブジェクトで使用されたメモリのバイト数です。 Numberoメモリ使用状況を解析するオブジェクトです。 Flash Player 9.0.115.0 以降のデバッグ版で使用した場合、指定されたオブジェクトのメモリ内サイズを返します。デバッグ版でない Flash Player で使用した場合、このメソッドは 0 を返します。 次の例では、startSampling()pauseSampling を使用して Sample オブジェクトを収集します。そして、Sample オブジェクトを繰り返し処理して id の値とサイズを取得します。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 プロパティが get/set 関数によって定義されているかどうかを確認します。プロパティが get/set 関数によって定義されているかどうかを示すブール値です(定義されている場合は true、定義されていない場合は false)。 BooleanobjObjectメソッドインスタンスまたはクラスです。 qnameQNameqname が undefined の場合は、コンストラクター関数の繰り返し回数を返します。 プロパティが get/set 関数によって定義されているかどうかを確認します。プロパティの get/set 関数に対して getInvocationCount() を使用する場合は、まず isGetterSetter() を呼び出し、それが get/set 関数であることを確認してから、getSetterInvocationCount または getGetterInvocationCount を使用してそれぞれの回数を取得します。 Flash Player デバッグ版のみ。 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) { } } } getInvocationCount()getSetterInvocationCount()getGetterInvocationCount()pauseSampling サンプリング処理を一時的に停止します。 サンプリング処理を一時的に停止します。startSampling() を使用してサンプリング処理を再開します。 Flash Player デバッグ版のみ。 startSampling()sampleInternalAllocs サンプラーに対し、Flash Player からの内部割り当てに NewObjectSamples を作成することを指示します。bBoolean サンプラーに対し、Flash Player からの内部割り当てに NewObjectSamples を作成することを指示します。これを true に設定した場合、割り当てごとに NewObjectSample が生成されます。これらの内部割り当てには、型またはオブジェクトへの参照がありません。 割り当てをトリガーした ActionScript スタックトレースが保持されます。 デフォルトは false で、ActionScript オブジェクトの割り当てのみを収集します。 setSamplerCallback サンプラーのコールバック関数を設定します。この関数は、サンプルストリームがほとんど使い切られると呼び出されます。fFunction サンプラーのコールバック関数を設定します。この関数は、サンプルストリームがほとんど使い切られると呼び出されます。これは、サンプルバッファーが充填される前にサンプルを処理するために使用されます。 pauseSampling が呼び出された後にコールバックが呼び出され、コールバックが実行された後に startSampling が呼び出されます。 startSampling メモリ使用状況 Sample オブジェクトを収集する処理を開始します。 メモリ使用状況 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) } } } Sample クラスstopSampling メモリ使用状況 Sample オブジェクトを収集する処理を終了し、サンプリング処理に使用されたリソースを解放します。 メモリ使用状況 Sample オブジェクトを収集する処理を終了し、サンプリング処理に使用されたリソースを解放します。サンプリング処理を開始するには、startSampling() を使用します。 Flash Player デバッグ版のみ。 Sample クラスSample Sample クラスは、異なる継続時間にわたるメモリ解析情報を保持するオブジェクトを作成します。Object Sample クラスは、異なる継続時間にわたるメモリ解析情報を保持するオブジェクトを作成します。 Flash Player デバッグ版のみ。 次の例では、Sample オブジェクトの stack プロパティと time プロパティを使用してメモリサンプルを収集します。 このサンプルには、NewObjectSample オブジェクト(newSamples 配列)、DeleteObjectSample オブジェクト(delSamples 配列)および CPU メモリサンプルオブジェクト(cpuSamples 配列)が含まれます。メモリプロファイラーを使用するには、Flash Player デバッグ版の 9.0.115.0 以降がインストールされている必要があります。 package { import flash.sampler.* import flash.system.* import flash.utils.* import flash.display.Sprite public class sampleTypes extends Sprite { var b:Boolean = true public function sampleTypes() { flash.sampler.startSampling(); for(var i:int=0;i<10000;i++) new Object(); var cpuSamples:Array=[]; var newSamples:Array=[]; var delSamples:Array=[]; var ids:Array=[] var lastTime:Number=0; for each(var s:Sample in getSamples()) { assert(s.time > 0); // positive assert(Math.floor(s.time) == s.time, s.time); // integral assert(s.time >= lastTime, s.time + ":" + lastTime); // ascending assert(s.stack == null || s.stack is Array) if(s.stack) { assert(s.stack[0] is StackFrame); assert(s.stack[0].name is String); } if(s is NewObjectSample) { var nos = NewObjectSample(s); assert(s.id > 0, s.id); assert(s.type is Class, getQualifiedClassName(s.type)); newSamples.push(s); ids[s.id] = "got one"; } else if(s is DeleteObjectSample) { var dos = DeleteObjectSample(s); delSamples.push(s); assert(ids[dos.id] == "got one"); } else if(s is Sample) cpuSamples.push(s); else { assert(false); } lastTime = s.time; } trace(b) trace(newSamples.length > 0) trace(cpuSamples.length > 0) trace(delSamples.length > 0) } private function assert(e:Boolean, mess:String=null):void { b = e && b; if(true && !e) { if(mess) trace(mess); trace(new Error().getStackTrace()); } } } } flash.sampler.getSamples()stack 指定された時間に Flash Player で実行されたメソッドに関する情報が含まれます。Array 指定された時間に Flash Player で実行されたメソッドに関する情報が含まれます。スタックトレースのフォーマットは、Flash Player デバッグ版の例外ダイアログボックスに表示される内容と似ています。 Flash Player デバッグ版のみ。 time Sample インスタンスの継続時間をマイクロ秒単位で定義します。Number Sample インスタンスの継続時間をマイクロ秒単位で定義します。 Flash Player デバッグ版のみ。 DeleteObjectSample DeleteObjectSample クラスは、getSamples() ストリーム内で作成されたオブジェクトを表します。各 DeleteObjectSample オブジェクトは NewObjectSample オブジェクトに対応します。flash.sampler:Sample DeleteObjectSample クラスは、getSamples() ストリーム内で作成されたオブジェクトを表します。各 DeleteObjectSample オブジェクトは NewObjectSample オブジェクトに対応します。 Flash Player デバッグ版のみ。 次の例では、Sample オブジェクトの stack プロパティと time プロパティを使用してメモリサンプルを収集します。 このサンプルには、NewObjectSample オブジェクト(newSamples 配列)、DeleteObjectSample オブジェクト(delSamples 配列)および CPU メモリサンプルオブジェクト(cpuSamples 配列)が含まれます。メモリプロファイラーを使用するには、Flash Player デバッグ版の 9.0.115.0 以降がインストールされている必要があります。 package { import flash.sampler.* import flash.system.* import flash.utils.* import flash.display.Sprite public class sampleTypes extends Sprite { var b:Boolean = true public function sampleTypes() { flash.sampler.startSampling(); for(var i:int=0;i<10000;i++) new Object(); var cpuSamples:Array=[]; var newSamples:Array=[]; var delSamples:Array=[]; var ids:Array=[] var lastTime:Number=0; for each(var s:Sample in getSamples()) { assert(s.time > 0); // positive assert(Math.floor(s.time) == s.time, s.time); // integral assert(s.time >= lastTime, s.time + ":" + lastTime); // ascending assert(s.stack == null || s.stack is Array) if(s.stack) { assert(s.stack[0] is StackFrame); assert(s.stack[0].name is String); } if(s is NewObjectSample) { var nos = NewObjectSample(s); assert(s.id > 0, s.id); assert(s.type is Class, getQualifiedClassName(s.type)); newSamples.push(s); ids[s.id] = "got one"; } else if(s is DeleteObjectSample) { var dos = DeleteObjectSample(s); delSamples.push(s); assert(ids[dos.id] == "got one"); } else if(s is Sample) cpuSamples.push(s); else { assert(false); } lastTime = s.time; } trace(b) trace(newSamples.length > 0) trace(cpuSamples.length > 0) trace(delSamples.length > 0) } private function assert(e:Boolean, mess:String=null):void { b = e && b; if(true && !e) { if(mess) trace(mess); trace(new Error().getStackTrace()); } } } } flash.sampler.getSamples()id NewObjectSample の識別番号と一致する一意の識別番号です。Number NewObjectSample の識別番号と一致する一意の識別番号です。 Flash Player デバッグ版のみ。 flash.sampler.NewObjectSample.idsize 削除される前の DeleteObjectSample オブジェクトのサイズです。Number 削除される前の DeleteObjectSample オブジェクトのサイズです。 Flash Player デバッグ版のみ。 flash.sampler.NewObjectSample.id