我就一直想改成SWTICH版的~
不過想想不知到那一種比較好~
所以我就來試看看~
個人的想法是 如果項數多
應該是SWTICH會比較快~
因為IF是多次判斷
所以來測試了一下~
如果是兩個選項的
testIf函數執行100000次 消耗的時間為71毫秒 消耗 0 記憶體 平均每次時間為 0.00071毫秒
testSwitch函數執行100000次 消耗的時間為72毫秒 消耗 0 記憶體 平均每次時間為 0.00072毫秒
四個選項的
testIf函數執行100000次 消耗的時間為70毫秒 消耗 0 記憶體 平均每次時間為 0.0007毫秒
testSwitch函數執行100000次 消耗的時間為72毫秒 消耗 0 記憶體 平均每次時間為 0.00072毫秒
10個選項的
testIf函數執行100000次 消耗的時間為74毫秒 消耗 0 記憶體 平均每次時間為 0.00074毫秒
testSwitch函數執行100000次 消耗的時間為75毫秒 消耗 0 記憶體 平均每次時間為 0.00075毫秒
不過以上是在數據平均的情況下~
如果數字不平均~會讓IF多次判斷的話
十個選項的
testIf函數執行100000次 消耗的時間為69毫秒 消耗 0 記憶體 平均每次時間為 0.00069毫秒
testSwitch函數執行100000次 消耗的時間為67毫秒 消耗 0 記憶體 平均每次時間為 0.00067毫秒
平均的話
我是改 teatInit 把數字給的和選項一樣多
那 IF 會比 SWTICH 稍快一點
如果 10個選項 但是產生的數字只從 0~5
會差多一點
如果只有 0~3那會差快一被
不過看起來 還是使用 if會比較好
下面是我的程式碼~
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
applicationComplete="init();"
>
<fx:Script>
<![CDATA[
import com.tenchiwang.unitTest.unitTestFunObj;
import com.tenchiwang.unitTest.unitTestTool;
private var arr:Array;
private function init():void
{
//switch
teatInit();
unitTestTool.addFunction('testIf', this, new Array(arr), 'testIf');
unitTestTool.addFunction('testSwitch', this, new Array(arr), 'testSwitch');
unitTestTool.startFunTest(100000);
trace(unitTestTool.DETAIL);
}
public function testIf(arr:Array):void
{
for(var i:int = arr.length-1;i<0;i--)
{
if(arr[i]==1)
{
test01();
}
else if(arr[i]==2)
{
test01();
}else if(arr[i]==3)
{
test01();
}else if(arr[i]==4)
{
test01();
}else if(arr[i]==5)
{
test01();
}else if(arr[i]==6)
{
test01();
}else if(arr[i]==7)
{
test01();
}else if(arr[i]==8)
{
test01();
}else if(arr[i]==9)
{
test01();
}else if(arr[i]==0)
{
test01();
}
else
{
test01();
}
}
}
public function testSwitch(arr:Array):void
{
for(var i:int = arr.length-1;i<0;i--)
{
switch(arr[i])
{
case 1:
test01();
break;
case 2:
test01();
break;
case 3:
test01();
break;
case 4:
test01();
break;
case 5:
test01();
break;
case 6:
test01();
break;
case 7:
test01();
break;
case 8:
test01();
break;
case 9:
test01();
break;
case 0:
test01();
break;
default:
test01();
}
}
}
private function teatInit():void
{
arr = new Array();
for(var i:int= 0;i<10000;i++)
{
arr.push(int(Math.random()*5));
}
}
private function test01():void
{
var tot:Number = 0;
for(var i:int= 0;i<10000;i++)
{
tot+= Math.random();
}
}
]]>
</fx:Script>
</s:Application>