いろいろなハッシュテーブルの速度比較 /** * */ mezumona forked:1favorite:3lines:289license : MIT License modified : 2010-03-14 21:58:49 Embed Tweet /** * */ package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.utils.Timer; import flash.events.TimerEvent; public class DictionarySpeedTest extends Sprite { public static const LOOP_TIME:int = 30000; private var textField_:TextField = new TextField(); private var waiter_:Timer = new Timer(1000); public function DictionarySpeedTest() { textField_.autoSize = TextFieldAutoSize.LEFT; textField_.defaultTextFormat = new TextFormat("_typewriter", 12); addChild(textField_); trace("ハッシュテーブルに使用するクラスを変更し、\n追加・取得・変更・削除の速度を確認します。"); trace("試行回数:", LOOP_TIME); trace("KEY 型:", "String"); trace("----"); waiter_.addEventListener(TimerEvent.TIMER, waiterTimerHandler); waiter_.start(); } private function trace(...rest):void { textField_.appendText(rest.join(" ").concat("\n")); } private var testCases_:Vector.<Class> = Vector.<Class>([ ObjectAddCase, ObjectGetCase, ObjectChangeCase, ObjectDeleteCase, ArrayAddCase, ArrayGetCase, ArrayChangeCase, ArrayDeleteCase, DictionaryAddCase, DictionaryGetCase, DictionaryChangeCase, DictionaryDeleteCase ]); private var repeatCount_:int = 0; private function waiterTimerHandler(event:TimerEvent):void { if (repeatCount_ < testCases_.length) { var testingCase:ITestCase = ITestCase(new testCases_[repeatCount_]()); trace(testingCase.name, testingCase.exec(), "ms"); // また 1 秒後 waiter_.reset(); waiter_.start(); ++repeatCount_; } // 終了 else { trace("終了。"); waiter_.stop(); waiter_.removeEventListener(TimerEvent.TIMER, waiterTimerHandler); waiter_ = null; } } } } /** * テストを実行する時に簡単にできるようにするためのインターフェイスです. */ internal interface ITestCase { function get name():String; function exec():int; } // Object // ------------------------------------------------------------------------------------------------ import flash.utils.getTimer; /** * コンテナに Object を使用し、値を追加する速度を出力します. */ internal class ObjectAddCase implements ITestCase { public function get name():String { return "ObjectAddCase :"; } public function exec():int { var arr:Object = {}; var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; var startTime:int = getTimer(); for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } return getTimer() - startTime; } } import flash.utils.getTimer; /** * コンテナに Object を使用し、値を取得する速度を出力します. */ internal class ObjectGetCase implements ITestCase { public function get name():String { return "ObjectGetCase :"; } public function exec():int { var arr:Object = {}; var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; i += 7) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { var hoge:int = arr[i.toString().concat("_")]; } return getTimer() - startTime; } } import flash.utils.getTimer; /** * コンテナに Object を使用し、値を変更する速度を出力します. */ internal class ObjectChangeCase implements ITestCase { public function get name():String { return "ObjectChangeCase :"; } public function exec():int { var arr:Object = {}; var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i << 1; } return getTimer() - startTime; } } import flash.utils.getTimer; /** * コンテナに Object を使用し、値を削除する速度を出力します. */ internal class ObjectDeleteCase implements ITestCase { public function get name():String { return "ObjectDeleteCase :"; } public function exec():int { var arr:Object = {}; var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { delete arr[i.toString().concat("_")]; } return getTimer() - startTime; } } // Array // ------------------------------------------------------------------------------------------------ import flash.utils.getTimer; /** * コンテナに Array を使用し、値を代入する速度を出力します. */ internal class ArrayAddCase implements ITestCase { public function get name():String { return "ArrayAddCase :"; } public function exec():int { var arr:Array = []; var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; var startTime:int = getTimer(); for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } return getTimer() - startTime; } } import flash.utils.getTimer; /** * コンテナに Array を使用し、値を取得する速度を出力します. */ internal class ArrayGetCase implements ITestCase { public function get name():String { return "ArrayGetCase :"; } public function exec():int { var arr:Array = []; var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; i += 7) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { var hoge:int = arr[i.toString().concat("_")]; } return getTimer() - startTime; } } import flash.utils.getTimer; /** * コンテナに Array を使用し、値を変更する速度を出力します. */ internal class ArrayChangeCase implements ITestCase { public function get name():String { return "ArrayChangeCase :"; } public function exec():int { var arr:Array = []; var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i << 1; } return getTimer() - startTime; } } import flash.utils.getTimer; /** * コンテナに Array を使用し、値を削除する速度を出力します. */ internal class ArrayDeleteCase implements ITestCase { public function get name():String { return "ArrayDeleteCase :"; } public function exec():int { var arr:Array = []; var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { delete arr[i.toString().concat("_")]; } return getTimer() - startTime; } } // Dictionary // ------------------------------------------------------------------------------------------------ import flash.utils.Dictionary; import flash.utils.getTimer; /** * コンテナに Dictionary を使用し、値を追加する速度を出力します. */ internal class DictionaryAddCase implements ITestCase { public function get name():String { return "DictionaryAddCase :"; } public function exec():int { var arr:Dictionary = new Dictionary(); var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; var startTime:int = getTimer(); for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } return getTimer() - startTime; } } import flash.utils.Dictionary; import flash.utils.getTimer; /** * コンテナに Dictionary を使用し、値を取得する速度を出力します. */ internal class DictionaryGetCase implements ITestCase { public function get name():String { return "DictionaryGetCase :"; } public function exec():int { var arr:Dictionary = new Dictionary(); var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; i += 7) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { var hoge:int = arr[i.toString().concat("_")]; } return getTimer() - startTime; } } import flash.utils.Dictionary; import flash.utils.getTimer; /** * コンテナに Dictionary を使用し、値を変更する速度を出力します. */ internal class DictionaryChangeCase implements ITestCase { public function get name():String { return "DictionaryChangeCase :"; } public function exec():int { var arr:Dictionary = new Dictionary(); var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i << 1; } return getTimer() - startTime; } } import flash.utils.getTimer; /** * コンテナに Dictionary を使用し、値を削除する速度を出力します. */ internal class DictionaryDeleteCase implements ITestCase { public function get name():String { return "DictionaryDeleteCase :"; } public function exec():int { var arr:Dictionary = new Dictionary(); var i:int; var n:int = DictionarySpeedTest.LOOP_TIME; for (i = 0; i < n; ++i) { arr[i.toString().concat("_")] = i; } var startTime:int = getTimer(); for (i = 0; i < n; ++i) { delete arr[i.toString().concat("_")]; } return getTimer() - startTime; } } Code Fullscreen Preview Fullscreen taiga djakarta_tra.. depre : hashハッシュテーブル hash concat toString exec trace String Object TimerEvent.TIMER join TimerEvent removeEventListener name addEventListener TextFormat Array length addChild Vector Sprite int sort new page view favorite forked pv211 forked from: いろいろなハッシュテーブルの速度比.. hacker_gac80c_s forked:1 favorite:0lines:289 (diff:1)