Accessor Performance Test
アクセッサのパフォーマンステスト
test1 の結果が不思議.
♥0 |
Line 216 |
Modified 2010-06-19 00:45:11 |
MIT License
archived:2017-03-10 19:23:21
ActionScript3 source code
/**
* Copyright hycro ( http://wonderfl.net/user/hycro )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ywZH
*/
// アクセッサのパフォーマンステスト
// test1 の結果が不思議.
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.utils.getTimer;
public class AccesserPerformanceTest extends Sprite {
private static const LOOP_NUM:uint = 5000000;
private var _tf:TextField;
public function AccesserPerformanceTest() {
_tf = new TextField();
_tf.width = stage.stageWidth;
_tf.height = stage.stageHeight;
addChild(_tf);
test1();
test2();
test3();
test4();
test5();
test6();
test7();
test8();
test9();
}
private function test1():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var obj:Object = {};
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.obj = obj;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.obj = obj;
}
var ed2:uint = getTimer();
_tf.appendText("object(set only)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n"); _tf.appendText("\n");
}
private function test2():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var str:String = "string";
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.str = str;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.str = str;
}
var ed2:uint = getTimer();
_tf.appendText("string(set only)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n"); _tf.appendText("\n");
}
private function test3():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.num = 1;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.num = 1;
}
var ed2:uint = getTimer();
_tf.appendText("int(set only)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n"); _tf.appendText("\n");
}
private function test4():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.obj;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.obj;
}
var ed2:uint = getTimer();
_tf.appendText("object(get only)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n"); _tf.appendText("\n");
}
private function test5():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.str;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.str;
}
var ed2:uint = getTimer();
_tf.appendText("string(get only)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n"); _tf.appendText("\n");
}
private function test6():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.num;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.num;
}
var ed2:uint = getTimer();
_tf.appendText("int(get only)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n");
_tf.appendText("\n");
}
private function test7():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.obj = classA.obj;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.obj = classB.obj;
}
var ed2:uint = getTimer();
_tf.appendText("object(set/get)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n"); _tf.appendText("\n");
}
private function test8():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.str = classA.str;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.str = classB.str;
}
var ed2:uint = getTimer();
_tf.appendText("string(set/get)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n"); _tf.appendText("\n");
}
private function test9():void {
var classA:ClassA = new ClassA();
var classB:ClassB = new ClassB();
var st:uint = getTimer();
for (var i:uint = 0; i < LOOP_NUM; i++) {
classA.num += 1;
}
var ed:uint = getTimer();
var st2:uint = getTimer();
for (var j:uint = 0; j < LOOP_NUM; j++) {
classB.num += 1;
}
var ed2:uint = getTimer();
_tf.appendText("int(set/get)------------------------\n");
_tf.appendText("classA > " + (ed - st) + " ms\n");
_tf.appendText("classB > " + (ed2 - st2) + " ms\n"); _tf.appendText("\n");
}
}
}
class ClassA {
public var obj:Object = {};
public var str:String = "string";
public var num:int = 0;
}
class ClassB {
private var _obj:Object = {};
private var _str:String = "string";
private var _num:int = 0;
public function get num():int
{
return _num;
}
public function set num(value:int):void
{
_num = value;
}
public function get str():String
{
return _str;
}
public function set str(value:String):void
{
_str = value;
}
public function get obj():Object
{
return _obj;
}
public function set obj(value:Object):void
{
_obj = value;
}
}