メモリの使用量を調べる

(サンプル一覧を表示する)

FlashDevelop を使って、メモリの使用量を調べるテストをしてみました。

デバッグ版の Flash プレーヤーでないと調べられないようです。
普通のリリース版プレーヤーで表示すると、メモリ使用量を調べる関数は
常に 0 を返すようです。

このデバッグ版とは、「Flash プレーヤーがデバッグ版かどうか」を指すので、
FlashDevelop のビルド条件の、 Debug / Release は関係ありません。
Release でビルドしても、デバッグ版プレーヤーで見ると値が表示されます。

表示される値は、ブラウザのプロセス内全体で使われているものが出るようです。
他のタブで Flash 画面を開いていたりすると、総メモリ使用量が増えます。
Flash の実行画面
メモリの使用量を調べる

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

メモリの使用量を調べる
デバッグ版プレーヤーをインストールしている人は
0 以外の数値が表示されていると思います。

ソースコード

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.sampler.getSize;
	import flash.system.System;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	
	/**
	 * 使用中のメモリ量を調べるサンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * 結果表示用テキストフィールド
		 */
		private var textField:TextField;
		
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化イベント
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// テキストフィールドの準備
			textField = new TextField();
			textField.autoSize = TextFieldAutoSize.LEFT;
			addChild(textField);
			
			// テキストフィールドの使用メモリを取得
			appendText("(テキストフィールドの使用メモリ量を表示)");
			appendText("getSize(textField) : " + getSize(textField) + " Bytes");
			appendText("");

			// 現在使用中のメモリ量を表示
			appendText("(単位を変えて総使用中メモリ量を表示)");
			appendText("totalMemory : " + System.totalMemory + " Bytes");
			appendText("totalMemory : " + toKB(System.totalMemory) + " KB");
			appendText("totalMemory : " + toMB(System.totalMemory) + " MB");
			appendText("");
			
			// 配列をたくさん作った後のメモリ使用量の変化を調べる
			var before:Number = System.totalMemory;
			appendText("(処理前)");
			appendText("totalMemory : " + before + " Bytes");
			
			var array:Array = new Array();
			for (var i:int = 0; i < 1000; i++)
				array[i] = new Object();
			
			var after:Number = System.totalMemory;
			appendText("(処理後)");
			appendText("totalMemory : " + after + " Bytes");
			appendText("配列の要素 1 個のサイズ : " + getSize(array[0]) + " Bytes");
			
			
		}
		
		/**
		 * テキストフィールドに、テキストを追加する
		 * @param	str
		 */
		private function appendText(str:String):void
		{
			textField.appendText(str + "\n");
		}
		
		/**
		 * バイト値を KB 単位にする
		 * @param	value
		 * @return
		 */
		private function toKB(value:uint):uint
		{
			return Math.floor(value / 1024);
		}
		
		/**
		 * バイト値を MB 単位にする
		 * @param	value
		 * @return
		 */
		private function toMB(value:uint):uint
		{
			return Math.floor(value / (1024 * 1024));
		}

	}
	
}		

外部リンク