using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Diagnostics; namespace ConsoleApplication1
{
class Program
{
static void Main()
{
compare();
}
private static void compare()
{
Console.WriteLine("*****比較if-else與三目運算符的效率*****");
for (int j = 1; j < 20; j++)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("這是第" + j + "次測試。");
Console.ForegroundColor = ConsoleColor.White; Stopwatch time1 = new Stopwatch(); time1.Start(); for (int i = 0; i < 100000000; i++)
{
int temp = 0;
if (temp == 1)
temp = 1;
else
temp = 0;
} time1.Stop();
TimeSpan t1 = time1.Elapsed;
Console.WriteLine("if-else執行時間是:"+t1.ToString()); time1.Reset(); Stopwatch time2 = new Stopwatch(); time2.Start();
for (int i = 0; i < 100000000; i++)
{
int temp = 0;
temp = temp == 0 ? 1 : 0;
}
time2.Stop();
TimeSpan t2 = time2.Elapsed;
Console.WriteLine("三目運算符執行時間是:" + t2.ToString()); time2.Reset(); string conclusion = (t1 < t2) ? "if-else效率高" : "三目元算符效率高";
float f1 = t1.Ticks;
float f2 = t2.Ticks;
float efficiency = (f1 < f2) ? f2 / f1 : f1 / f2;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("結論是:" + conclusion + ",效率比是:" + efficiency.ToString());
}
Console.WriteLine("*****按下回車鍵關閉窗口*****");
Console.ReadLine();
}
}
}您新建一個控制臺程序,然後放入上述代碼執行。我運行的結果如下(運行時間可能不一樣,不過結論都是一樣的)
*****比較if-else與三目運算符的效率*****
這是第1次測試。
if-else執行時間是:00:00:00.4057753
三目運算符執行時間是:00:00:00.3721558
結論是:三目元算符效率高,效率比是:1.090337
這是第2次測試。
if-else執行時間是:00:00:00.4042576
三目運算符執行時間是:00:00:00.3778070
結論是:三目元算符效率高,效率比是:1.070011
這是第3次測試。
if-else執行時間是:00:00:00.4047548
三目運算符執行時間是:00:00:00.3696018
結論是:三目元算符效率高,效率比是:1.09511
這是第4次測試。
if-else執行時間是:00:00:00.4016809
三目運算符執行時間是:00:00:00.3694739
結論是:三目元算符效率高,效率比是:1.08717
這是第5次測試。
if-else執行時間是:00:00:00.4046356
三目運算符執行時間是:00:00:00.3712424
結論是:三目元算符效率高,效率比是:1.08995
這是第6次測試。
if-else執行時間是:00:00:00.4015913
三目運算符執行時間是:00:00:00.3709766
結論是:三目元算符效率高,效率比是:1.082525
這是第7次測試。
if-else執行時間是:00:00:00.4050849
三目運算符執行時間是:00:00:00.3707200
結論是:三目元算符效率高,效率比是:1.092698
這是第8次測試。
if-else執行時間是:00:00:00.4048344
三目運算符執行時間是:00:00:00.3703526
結論是:三目元算符效率高,效率比是:1.093105
這是第9次測試。
if-else執行時間是:00:00:00.4026887
三目運算符執行時間是:00:00:00.3697847
結論是:三目元算符效率高,效率比是:1.088982
這是第10次測試。
if-else執行時間是:00:00:00.4053084
三目運算符執行時間是:00:00:00.3703975
結論是:三目元算符效率高,效率比是:1.094252
這是第11次測試。
if-else執行時間是:00:00:00.4023193
三目運算符執行時間是:00:00:00.3702872
結論是:三目元算符效率高,效率比是:1.086506
這是第12次測試。
if-else執行時間是:00:00:00.4036262
三目運算符執行時間是:00:00:00.3694859
結論是:三目元算符效率高,效率比是:1.092399
這是第13次測試。
if-else執行時間是:00:00:00.4018123
三目運算符執行時間是:00:00:00.3697152
結論是:三目元算符效率高,效率比是:1.086816
這是第14次測試。
if-else執行時間是:00:00:00.4028462
三目運算符執行時間是:00:00:00.3695552
結論是:三目元算符效率高,效率比是:1.090084
這是第15次測試。
if-else執行時間是:00:00:00.4023199
三目運算符執行時間是:00:00:00.3705751
結論是:三目元算符效率高,效率比是:1.085664
這是第16次測試。
if-else執行時間是:00:00:00.4018908
三目運算符執行時間是:00:00:00.3699753
結論是:三目元算符效率高,效率比是:1.086264
這是第17次測試。
if-else執行時間是:00:00:00.4021569
三目運算符執行時間是:00:00:00.3696670
結論是:三目元算符效率高,效率比是:1.08789
這是第18次測試。
if-else執行時間是:00:00:00.4020547
三目運算符執行時間是:00:00:00.3708227
結論是:三目元算符效率高,效率比是:1.084224
這是第19次測試。
if-else執行時間是:00:00:00.4017543
三目運算符執行時間是:00:00:00.3695815
結論是:三目元算符效率高,效率比是:1.087052
*****按下回車鍵關閉窗口*****========================所以我的問題來了,爲什麽三目運算符的效率高呢?
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class LvJin
{
private void Jin()
{
int king = 0;
int temp = 0;
if (temp == 0)
king = 1;
else
king = 0;
int king2 = temp == 0 ? 1 : 0;
}
}
}通過MSIL Disassembler工具(MSIL 反組譯工具)查看上述代碼的IL(中間語言),如下:.method private hidebysig instance void Jin() cil managed
{
// Code size 31 (0x1f)
.maxstack 2
.locals init ([0] int32 king,
[1] int32 temp,
[2] int32 king2,
[3] bool CS$4$0000)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldc.i4.0
IL_0004: stloc.1
IL_0005: ldloc.1
IL_0006: ldc.i4.0
IL_0007: ceq
IL_0009: ldc.i4.0
IL_000a: ceq
IL_000c: stloc.3
IL_000d: ldloc.3
IL_000e: brtrue.s IL_0014
IL_0010: ldc.i4.1
IL_0011: stloc.0
IL_0012: br.s IL_0016
IL_0014: ldc.i4.0
IL_0015: stloc.0
IL_0016: ldloc.1
IL_0017: brfalse.s IL_001c
IL_0019: ldc.i4.0
IL_001a: br.s IL_001d
IL_001c: ldc.i4.1
IL_001d: stloc.2
IL_001e: ret
} // end of method LvJin::Jin請哪位大俠幫忙解讀下,如何看出來三目運算符的效率高?
if else 在执行过程中两条语句三元运算符 是一条语句。猜测
看楼下。
public static T If<T>(this T t, Predicate<T> predicate, Action<T> action) where T: class
{
if(t == null) throw new ArgumentNullException();
if (predicate(t)) action(t);
return t;
}
公共字段
Add 将两个值相加并将结果推送到计算堆栈上。
Add_Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上。
Add_Ovf_Un 将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上。
And 计算两个值的位 AND 并将结果推送到计算堆栈上。
Arglist 返回指向当前方法的参数列表的非托管指针。
Beq 如果两个值相等,则将控制转移到目标指令。
Beq_S 如果两个值相等,则将控制转移到目标指令(短格式)。
Bge 如果第一个值大于或等于第二个值,则将控制转移到目标指令。
Bge_S 如果第一个值大于或等于第二个值,则将控制转移到目标指令(短格式)。
Bge_Un 当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令。
Bge_Un_S 当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令(短格式)。
Bgt 如果第一个值大于第二个值,则将控制转移到目标指令。
Bgt_S 如果第一个值大于第二个值,则将控制转移到目标指令(短格式)。
Bgt_Un 当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令。
Bgt_Un_S 当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令(短格式)。
Ble 如果第一个值小于或等于第二个值,则将控制转移到目标指令。
Ble_S 如果第一个值小于或等于第二个值,则将控制转移到目标指令(短格式)。
Ble_Un 当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于或等于第二个值,则将控制转移到目标指令。
Ble_Un_S 当比较无符号整数值或不可排序的浮点值时,如果第一个值小于或等于第二个值,则将控制权转移到目标指令(短格式)。
Blt 如果第一个值小于第二个值,则将控制转移到目标指令。
Blt_S 如果第一个值小于第二个值,则将控制转移到目标指令(短格式)。
Blt_Un 当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于第二个值,则将控制转移到目标指令。
Blt_Un_S 当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于第二个值,则将控制转移到目标指令(短格式)。
Bne_Un 当两个无符号整数值或不可排序的浮点型值不相等时,将控制转移到目标指令。
Bne_Un_S 当两个无符号整数值或不可排序的浮点型值不相等时,将控制转移到目标指令(短格式)。
Box 将值类转换为对象引用(O 类型)。
Br 无条件地将控制转移到目标指令。
Break 向公共语言结构 (CLI) 发出信号以通知调试器已撞上了一个断点。
Brfalse 如果 value 为 false、空引用(Visual Basic 中的 Nothing)或零,则将控制转移到目标指令。
Brfalse_S 如果 value 为 false、空引用或零,则将控制转移到目标指令。
Brtrue 如果 value 为 true、非空或非零,则将控制转移到目标指令。
Brtrue_S 如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)。
Br_S 无条件地将控制转移到目标指令(短格式)。
Call 调用由传递的方法说明符指示的方法。
Calli 通过调用约定描述的参数调用在计算堆栈上指示的方法(作为指向入口点的指针)。
Callvirt 对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。
Castclass 尝试将引用传递的对象转换为指定的类。
Ceq 比较两个值。如果这两个值相等,则将整数值 1 ((int32) 推送到计算堆栈上;否则,将 0 (int32) 推送到计算堆栈上。
Cgt 比较两个值。如果第一个值大于第二个值,则将整数值 1 ((int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。
Cgt_Un 比较两个无符号的或不可排序的值。如果第一个值大于第二个值,则将整数值 1 ((int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。
Ckfinite 如果值不是有限数,则引发 ArithmeticException。
Clt 比较两个值。如果第一个值小于第二个值,则将整数值 1 ((int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。
Clt_Un 比较无符号的或不可排序的值 value1 和 value2。如果 value1 小于 value2,则将整数值 1 ((int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。
Conv_I 将位于计算堆栈顶部的值转换为 natural int。
Conv_I1 将位于计算堆栈顶部的值转换为 int8,然后将其扩展(填充)为 int32。
Conv_I2 将位于计算堆栈顶部的值转换为 int16,然后将其扩展(填充)为 int32。
Conv_I4 将位于计算堆栈顶部的值转换为 int32。
Conv_I8 将位于计算堆栈顶部的值转换为 int64。
Conv_Ovf_I 将位于计算堆栈顶部的有符号值转换为有符号 natural int,并在溢出时引发 OverflowException。
Conv_Ovf_I1 将位于计算堆栈顶部的有符号值转换为有符号 int8 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv_Ovf_I1_Un 将位于计算堆栈顶部的无符号值转换为有符号 int8 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv_Ovf_I2 将位于计算堆栈顶部的有符号值转换为有符号 int16 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv_Ovf_I2_Un 将位于计算堆栈顶部的无符号值转换为有符号 int16 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv_Ovf_I4 将位于计算堆栈顶部的有符号值转换为有符号 int32,并在溢出时引发 OverflowException。
Conv_Ovf_I4_Un 将位于计算堆栈顶部的无符号值转换为有符号 int32,并在溢出时引发 OverflowException。
Conv_Ovf_I8 将位于计算堆栈顶部的有符号值转换为有符号 int64,并在溢出时引发 OverflowException。
Conv_Ovf_I8_Un 将位于计算堆栈顶部的无符号值转换为有符号 int64,并在溢出时引发 OverflowException。
Conv_Ovf_I_Un 将位于计算堆栈顶部的无符号值转换为有符号 natural int,并在溢出时引发 OverflowException。
Conv_Ovf_U 将位于计算堆栈顶部的有符号值转换为 unsigned natural int,并在溢出时引发 OverflowException。
Conv_Ovf_U1 将位于计算堆栈顶部的有符号值转换为 unsigned int8 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv_Ovf_U1_Un 将位于计算堆栈顶部的无符号值转换为 unsigned int8 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv_Ovf_U2 将位于计算堆栈顶部的有符号值转换为 unsigned int16 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv_Ovf_U2_Un 将位于计算堆栈顶部的无符号值转换为 unsigned int16 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv_Ovf_U4 将位于计算堆栈顶部的有符号值转换为 unsigned int32,并在溢出时引发 OverflowException。
Conv_Ovf_U4_Un 将位于计算堆栈顶部的无符号值转换为 unsigned int32,并在溢出时引发 OverflowException。
Conv_Ovf_U8 将位于计算堆栈顶部的有符号值转换为 unsigned int64,并在溢出时引发 OverflowException。
Conv_Ovf_U8_Un 将位于计算堆栈顶部的无符号值转换为 unsigned int64,并在溢出时引发 OverflowException。
Conv_Ovf_U_Un 将位于计算堆栈顶部的无符号值转换为 unsigned natural int,并在溢出时引发 OverflowException。
Conv_R4 将位于计算堆栈顶部的值转换为 float32。
Conv_R8 将位于计算堆栈顶部的值转换为 float64。
Conv_R_Un 将位于计算堆栈顶部的无符号整数值转换为 float32。
Conv_U 将位于计算堆栈顶部的值转换为 unsigned natural int,然后将其扩展为 natural int。
Conv_U1 将位于计算堆栈顶部的值转换为 unsigned int8,然后将其扩展为 int32。
Conv_U2 将位于计算堆栈顶部的值转换为 unsigned int16,然后将其扩展为 int32。
Conv_U4 将位于计算堆栈顶部的值转换为 unsigned int32,然后将其扩展为 int32。
Conv_U8 将位于计算堆栈顶部的值转换为 unsigned int64,然后将其扩展为 int64。
Cpblk 将指定数目的字节从源地址复制到目标地址。
Cpobj 将位于对象(&、* 或 natural int 类型)地址的值类型复制到目标对象(&、* 或 natural int 类型)的地址。
Div 将两个值相除并将结果作为浮点(F 类型)或商(int32 类型)推送到计算堆栈上。
Div_Un 两个无符号整数值相除并将结果 (int32) 推送到计算堆栈上。
Dup 复制计算堆栈上当前最顶端的值,然后将副本推送到计算堆栈上。
Endfilter 将控制从异常的 filter 子句转移回公共语言结构 (CLI) 异常处理程序。
Endfinally 将控制从异常块的 fault 或 finally 子句转移回公共语言结构 (CLI) 异常处理程序。
Initblk 将位于特定地址的内存的指定块初始化为给定大小和初始值。
Initobj 将位于指定地址的对象的所有字段初始化为空引用或适当的基元类型的 0。
Isinst 测试对象引用(O 类型)是否为特定类的实例。
Jmp 退出当前方法并跳至指定方法。
Ldarg 将参数(由指定索引值引用)加载到堆栈上。
Ldarga 将参数地址加载到计算堆栈上。
Ldarga_S 以短格式将参数地址加载到计算堆栈上。
Ldarg_0 将索引为 0 的参数加载到计算堆栈上。
Ldarg_1 将索引为 1 的参数加载到计算堆栈上。
Ldarg_2 将索引为 2 的参数加载到计算堆栈上。
Ldarg_3 将索引为 3 的参数加载到计算堆栈上。
Ldarg_S 将参数(由指定的短格式索引引用)加载到计算堆栈上。
Ldc_I4 将所提供的 int32 类型的值作为 int32 推送到计算堆栈上。
Ldc_I4_0 将整数值 0 作为 int32 推送到计算堆栈上。
Ldc_I4_1 将整数值 1 作为 int32 推送到计算堆栈上。
Ldc_I4_2 将整数值 2 作为 int32 推送到计算堆栈上。
Ldc_I4_3 将整数值 3 作为 int32 推送到计算堆栈上。
Ldc_I4_4 将整数值 4 作为 int32 推送到计算堆栈上。
Ldc_I4_5 将整数值 5 作为 int32 推送到计算堆栈上。
Ldc_I4_6 将整数值 6 作为 int32 推送到计算堆栈上。
Ldc_I4_7 将整数值 7 作为 int32 推送到计算堆栈上。
Ldc_I4_8 将整数值 8 作为 int32 推送到计算堆栈上。
Ldc_I4_M1 将整数值 -1 作为 int32 推送到计算堆栈上。
Ldc_I4_S 将提供的 int8 值作为 int32 推送到计算堆栈上(短格式)。
Ldc_I8 将所提供的 int64 类型的值作为 int64 推送到计算堆栈上。
Ldc_R4 将所提供的 float32 类型的值作为 F (float) 类型推送到计算堆栈上。
Ldc_R8 将所提供的 float64 类型的值作为 F (float) 类型推送到计算堆栈上。
Ldelema 将位于指定数组索引的数组元素的地址作为 & 类型(托管指针)加载到计算堆栈的顶部。
Ldelem_I 将位于指定数组索引处的 natural int 类型的元素作为 natural int 加载到计算堆栈的顶部。
Ldelem_I1 将位于指定数组索引处的 int8 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem_I2 将位于指定数组索引处的 int16 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem_I4 将位于指定数组索引处的 int32 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem_I8 将位于指定数组索引处的 int64 类型的元素作为 int64 加载到计算堆栈的顶部。
Ldelem_R4 将位于指定数组索引处的 float32 类型的元素作为 F 类型(浮点型)加载到计算堆栈的顶部。
Ldelem_R8 将位于指定数组索引处的 float64 类型的元素作为 F 类型(浮点型)加载到计算堆栈的顶部。
Ldelem_Ref 将位于指定数组索引处的包含对象引用的元素作为 O 类型(对象引用)加载到计算堆栈的顶部。
Ldelem_U1 将位于指定数组索引处的 unsigned int8 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem_U2 将位于指定数组索引处的 unsigned int16 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem_U4 将位于指定数组索引处的 unsigned int32 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldfld 查找对象中其引用当前位于计算堆栈的字段的值。
Ldflda 查找对象中其引用当前位于计算堆栈的字段的地址。
Ldftn 将指向实现特定方法的本机代码的非托管指针(natural int 类型)推送到计算堆栈上。
Ldind_I 将 natural int 类型的值作为 natural int 间接加载到计算堆栈上。
Ldind_I1 将 int8 类型的值作为 int32 间接加载到计算堆栈上。
Ldind_I2 将 int16 类型的值作为 int32 间接加载到计算堆栈上。
Ldind_I4 将 int32 类型的值作为 int32 间接加载到计算堆栈上。
Ldind_I8 将 int64 类型的值作为 int64 间接加载到计算堆栈上。
Ldind_R4 将 float32 类型的值作为 F (float) 类型间接加载到计算堆栈上。
Ldind_R8 将 float64 类型的值作为 F (float) 类型间接加载到计算堆栈上。
Ldind_Ref 将对象引用作为 O(对象引用)类型间接加载到计算堆栈上。
Ldind_U1 将 unsigned int8 类型的值作为 int32 间接加载到计算堆栈上。
Ldind_U2 将 unsigned int16 类型的值作为 int32 间接加载到计算堆栈上。
Ldind_U4 将 unsigned int32 类型的值作为 int32 间接加载到计算堆栈上。
Ldlen 将从零开始的、一维数组的元素的数目推送到计算堆栈上。
Ldloc 将指定索引处的局部变量加载到计算堆栈上。
Ldloca 将位于特定索引处的局部变量的地址加载到计算堆栈上。
Ldloca_S 将位于特定索引处的局部变量的地址加载到计算堆栈上(短格式)。
Ldloc_0 将索引 0 处的局部变量加载到计算堆栈上。
Ldloc_1 将索引 1 处的局部变量加载到计算堆栈上。
Ldloc_2 将索引 2 处的局部变量加载到计算堆栈上。
Ldloc_3 将索引 3 处的局部变量加载到计算堆栈上。
Ldloc_S 将特定索引处的局部变量加载到计算堆栈上(短格式)。
Ldnull 将空引用(O 类型)推送到计算堆栈上。
Ldobj 将地址指向的值类型对象复制到计算堆栈的顶部。
Ldsfld 将静态字段的值推送到计算堆栈上。
Ldsflda 将静态字段的地址推送到计算堆栈上。
Ldstr 推送对元数据中存储的字符串的新对象引用。
Ldtoken 将元数据标记转换为其运行时表示形式,并将其推送到计算堆栈上。
Ldvirtftn 将指向实现与指定对象关联的特定虚方法的本机代码的非托管指针(natural int 类型)推送到计
Leave 退出受保护的代码区域,无条件将控制转移到特定目标指令。
Leave_S 退出受保护的代码区域,无条件将控制转移到目标指令(短格式)。
Localloc 从本地动态内存池分配特定数目的字节并将第一个分配的字节的地址(瞬态指针,* 类型)推送到计算堆栈上。
Mkrefany 将对特定类型实例的类型化引用推送到计算堆栈上。
Mul 将两个值相乘并将结果推送到计算堆栈上。
Mul_Ovf 将两个整数值相乘,执行溢出检查,并将结果推送到计算堆栈上。
Mul_Ovf_Un 将两个无符号整数值相乘,执行溢出检查,并将结果推送到计算堆栈上。
Neg 对一个值执行求反并将结果推送到计算堆栈上。
Newarr 将对新的从零开始的一维数组(其元素属于特定类型)的对象引用推送到计算堆栈上。
Newobj 创建一个值类型的新对象或新实例,并将对象引用(O 类型)推送到计算堆栈上。
Nop 如果修补操作码,则填充空间。尽管可能消耗处理周期,但未执行任何有意义的操作。
Not 计算堆栈顶部整数值的按位求补并将结果作为相同的类型推送到计算堆栈上。
or 计算位于堆栈顶部的两个整数值的按位求补并将结果推送到计算堆栈上。
Pop 移除当前位于计算堆栈顶部的值。
Refanytype 检索嵌入在类型化引用内的类型标记。
Refanyval 检索嵌入在类型化引用内的地址(& 类型)。
Rem 将两个值相除并将余数推送到计算堆栈上。
Rem_Un 将两个无符号值相除并将余数推送到计算堆栈上。
Ret 从当前方法返回,并将返回值(如果存在)从调用方的计算堆栈推送到被调用方的计算堆栈上。
Rethrow 再次引发当前异常。
Shl 将整数值左移(用零填充)指定的位数,并将结果推送到计算堆栈上。
Shr 将整数值右移(保留符号)指定的位数,并将结果推送到计算堆栈上。
Shr_Un 将无符号整数值右移(用零填充)指定的位数,并将结果推送到计算堆栈上。
Sizeof 将提供的值类型的大小(以字节为单位)推送到计算堆栈上。
Starg 将位于计算堆栈顶部的值存储到位于指定索引的参数槽中。
Starg_S 将位于计算堆栈顶部的值存储在参数槽中的指定索引处(短格式)。
Stelem_I 用计算堆栈上的 natural int 值替换给定索引处的数组元素。
Stelem_I1 用计算堆栈上的 int8 值替换给定索引处的数组元素。
Stelem_I2 用计算堆栈上的 int16 值替换给定索引处的数组元素。
Stelem_I4 用计算堆栈上的 int32 值替换给定索引处的数组元素。
Stelem_I8 用计算堆栈上的 int64 值替换给定索引处的数组元素。
Stelem_R4 用计算堆栈上的 float32 值替换给定索引处的数组元素。
Stelem_R8 用计算堆栈上的 float64 值替换给定索引处的数组元素。
Stelem_Ref 用计算堆栈上的对象 ref 值(O 类型)替换给定索引处的数组元素。
Stfld 用新值替换在对象引用或指针的字段中存储的值。
Stind_I 在所提供的地址存储 natural int 类型的值。
Stind_I1 在所提供的地址存储 int8 类型的值。
Stind_I2 在所提供的地址存储 int16 类型的值。
Stind_I4 在所提供的地址存储 int32 类型的值。
Stind_I8 在所提供的地址存储 int64 类型的值。
Stind_R4 在所提供的地址存储 float32 类型的值。
Stind_R8 在所提供的地址存储 float64 类型的值。
Stind_Ref 存储所提供地址处的对象引用值。
Stloc 从计算堆栈的顶部弹出当前值并将其存储到指定索引处的局部变量列表中。
Stloc_0 从计算堆栈的顶部弹出当前值并将其存储到索引 0 处的局部变量列表中。
Stloc_1 从计算堆栈的顶部弹出当前值并将其存储到索引 1 处的局部变量列表中。
Stloc_2 从计算堆栈的顶部弹出当前值并将其存储到索引 2 处的局部变量列表中。
Stloc_3 从计算堆栈的顶部弹出当前值并将其存储到索引 3 处的局部变量列表中。
Stloc_S 从计算堆栈的顶部弹出当前值并将其存储在局部变量列表中的 index 处(短格式)。
Stobj 将指定类型的值从计算堆栈复制到所提供的内存地址中。
Stsfld 用来自计算堆栈的值替换静态字段的值。
Sub 从其他值中减去一个值并将结果推送到计算堆栈上。
Sub_Ovf 从另一值中减去一个整数值,执行溢出检查,并且将结果推送到计算堆栈上。
Sub_Ovf_Un 从另一值中减去一个无符号整数值,执行溢出检查,并且将结果推送到计算堆栈上。
Switch 实现跳转表。
Tailcall 执行后缀的方法调用指令,以便在执行实际调用指令前移除当前方法的堆栈帧。
Throw 引发当前位于计算堆栈上的异常对象。
Unaligned 指示当前位于计算堆栈上的地址可能没有与紧接的 ldind、stind、ldfld、stfld、ldobj、stobj、initblk 或 cpblk 指令的自然大小对齐。
Unbox 将值类型的已装箱的表示形式转换为其未装箱的形式。
Volatile 指定当前位于计算堆栈顶部的地址可以是易失的,并且读取该位置的结果不能被缓存,或者对该地址的多个存储区不能被取消。
Xor 计算位于计算堆栈顶部的两个值的按位异或,并且将结果推送到计算堆栈上。 公共方法
Equals(从 Object 继承) 已重载。确定两个 Object 实例是否相等。
GetHashCode(从 Object 继承) 用作特定类型的哈希函数,适合在哈希算法和数据结构(如哈希表)中使用。
GetType(从 Object 继承) 获取当前实例的 Type。
TakesSingleByteArgument 如果提供的操作码采用单字节参数则返回真或假。
ToString(从 Object 继承) 返回表示当前 Object 的 String。 受保护的方法
Finalize(从 Object 继承) 已重写。允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。
在 C# 和 C++ 中,使用析构函数语法来表示终结程序。MemberwiseClone(从 Object 继承) 创建当前 Object 的浅表副本。
如果你的條件是:||或 && 來結合的話 按如下的寫法:
if(表達式1||表達式2)
{
}
Else
{
}
If(表達式2&& 表達式1)
{
}
Else
{
}
要比其相應得其它組合的運行效率高些,
總之 如果條件是以 || 來結合的 那就把為真率高的放在前面
如果條件是以 && 來結合的 那就把為真率低的放在前面 這樣有助於提高程式運行效率.
可能大家平时工作中对于这些小细节不是很关心
所以觉得大家有时间可以来关注一下
所以给此帖上了推荐从最近一段时间.NET区提问的问题来看 多数人还是比较浮躁
能静下心来 想到分析到此帖中提到的二者性能差异的 还是不多见的
(1)通用的語言基礎是.NET運行的基礎,當我們對程序的運行結果有異議的時候,如何透過本質看表面,需要我們從底層入手來探索,這時IL是你必須知道的基礎。
(2)元數據和IL語言是CLR的基礎,了解必要的中間語言是深入認識CLR的捷徑。
(3)大量的示例分析是以IL來揭密的,因此了解IL是讀懂他人代碼必備基礎,可以給自己更多收穫。
IL就像是打開.NET内部機制的大門,我們沒有理由放棄一條可以直接通達大門的便捷之路,而盲目地以其他的方式追求深入,無疑會先錯過這扇門。很明顯這些優越性足以誘惑我們花時閒和精力涉獵其中。然而,了解了IL的好處,並不意味著我們應該過分地來關注IL,有人甚至可以洋洋灑灑地寫一堆IL代碼來實現一個簡單的Hello World程序。但是,正如我們知道的那樣,程序設計已經走過了幾十年的發展,純粹陶醉在IL中止步不前,同樣可悲。看見任何代碼都以IL的角度來分析,又將走進另一個誤區,我們的宗旨是追求但不過分。=======摘錄自《你必須知道的.NET》第96頁===========
[3] bool CS$4$0000IL_0005: ldloc.1
IL_0006: ldc.i4.0
IL_0007: ceq
IL_0009: ldc.i4.0
IL_000a: ceq
IL_000c: stloc.3
IL_000d: ldloc.3
IL_000e: brtrue.s IL_0014
IL_0010: ldc.i4.1
IL_0011: stloc.0
IL_0012: br.s IL_0016
IL_0014: ldc.i4.0
IL_0015: stloc.0
( IL_0016: ldloc.1 )--------------------------------------IL_0016: ldloc.1
IL_0017: brfalse.s IL_001c
IL_0019: ldc.i4.0
IL_001a: br.s IL_001d
IL_001c: ldc.i4.1
IL_001d: stloc.2
确实。毫秒级的差别,而且又不会量化倍增这种效率差 放弃 if else 是站不住脚的。
看到网上有的对#include <stdio.h>
int
main()
{
int a = 1, b = 2, c;
if(a < b)
c = a;
else
c = b;
c = a < b ? a : b;
return 0;
}
这段代码研究汇编代码 得出来的结论确是相反的 感觉可能和编译环境有关
一个是g++得到的 三目的操作少
另一个是VS下反汇编的得到的 三目的操作反而多
一語中的!(差距就在這個隱式bool變量)
我在2樓中貼出了一段IL,只有通過分析這段IL,才能有憑有据地說出這個結論。
.method private hidebysig instance void Jin() cil managed
{
// Code size 31 (0x1f)
.maxstack 2
.locals init ([0] int32 king,
[1] int32 temp,
[2] int32 king2,
[3] bool CS$4$0000)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: ldc.i4.0
IL_0004: stloc.1
IL_0005: ldloc.1
IL_0006: ldc.i4.0
IL_0007: ceq
IL_0009: ldc.i4.0
IL_000a: ceq
IL_000c: stloc.3
IL_000d: ldloc.3
IL_000e: brtrue.s IL_0014
IL_0010: ldc.i4.1
IL_0011: stloc.0
IL_0012: br.s IL_0016
IL_0014: ldc.i4.0
IL_0015: stloc.0
IL_0016: ldloc.1
IL_0017: brfalse.s IL_001c
IL_0019: ldc.i4.0
IL_001a: br.s IL_001d
IL_001c: ldc.i4.1
IL_001d: stloc.2
IL_001e: ret
} // end of method LvJin::Jin
据说在C的不同的编译器中三目运算符与if-else的速度快慢也各不相同,这就要看是什么编译器的优化了。
三目运算经编译以后与if。。else生成的是一样的
只是写法不同而已。编译器在编译时会把它转成与if。。else一样来编译
這是第1次測試。
if-else執行時間是:00:00:00.2980850
三目運算符執行時間是:00:00:00.3146640
結論是:if-else效率高,效率比是:1.055618
這是第2次測試。
if-else執行時間是:00:00:00.2967013
三目運算符執行時間是:00:00:00.3218017
結論是:if-else效率高,效率比是:1.084598
這是第3次測試。
if-else執行時間是:00:00:00.2982652
三目運算符執行時間是:00:00:00.3127492
結論是:if-else效率高,效率比是:1.048561
這是第4次測試。
if-else執行時間是:00:00:00.2945572
三目運算符執行時間是:00:00:00.3131118
結論是:if-else效率高,效率比是:1.062991
這是第5次測試。
if-else執行時間是:00:00:00.2959158
三目運算符執行時間是:00:00:00.3128791
結論是:if-else效率高,效率比是:1.057325
這是第6次測試。
if-else執行時間是:00:00:00.2953048
三目運算符執行時間是:00:00:00.3164421
結論是:if-else效率高,效率比是:1.071578
這是第7次測試。
if-else執行時間是:00:00:00.2967265
三目運算符執行時間是:00:00:00.3191240
結論是:if-else效率高,效率比是:1.075482
這是第8次測試。
if-else執行時間是:00:00:00.2977990
三目運算符執行時間是:00:00:00.3252131
結論是:if-else效率高,效率比是:1.092056
這是第9次測試。
if-else執行時間是:00:00:00.2998663
三目運算符執行時間是:00:00:00.3112348
結論是:if-else效率高,效率比是:1.037912
這是第10次測試。
if-else執行時間是:00:00:00.2958867
三目運算符執行時間是:00:00:00.3209681
結論是:if-else效率高,效率比是:1.084767
這是第11次測試。
if-else執行時間是:00:00:00.2975353
三目運算符執行時間是:00:00:00.3125643
結論是:if-else效率高,效率比是:1.050512
這是第12次測試。
if-else執行時間是:00:00:00.2964611
三目運算符執行時間是:00:00:00.3082606
結論是:if-else效率高,效率比是:1.039801
這是第13次測試。
if-else執行時間是:00:00:00.2998453
三目運算符執行時間是:00:00:00.3173735
結論是:if-else效率高,效率比是:1.058457
這是第14次測試。
if-else執行時間是:00:00:00.2959563
三目運算符執行時間是:00:00:00.3090320
結論是:if-else效率高,效率比是:1.044181
這是第15次測試。
if-else執行時間是:00:00:00.2947156
三目運算符執行時間是:00:00:00.3122807
結論是:if-else效率高,效率比是:1.0596
這是第16次測試。
if-else執行時間是:00:00:00.2953188
三目運算符執行時間是:00:00:00.3170430
結論是:if-else效率高,效率比是:1.073562
這是第17次測試。
if-else執行時間是:00:00:00.2992732
三目運算符執行時間是:00:00:00.3093373
結論是:if-else效率高,效率比是:1.033628
這是第18次測試。
if-else執行時間是:00:00:00.2988488
三目運算符執行時間是:00:00:00.3134473
結論是:if-else效率高,效率比是:1.048849
這是第19次測試。
if-else執行時間是:00:00:00.2970170
三目運算符執行時間是:00:00:00.3082989
結論是:if-else效率高,效率比是:1.037984
*****按下回車鍵關閉窗口*****
這是第1次測試。
if-else執行時間是:00:00:00.5865641
三目運算符執行時間是:00:00:00.5465143
結論是:三目元算符效率高,效率比是:1.073282
這是第2次測試。
if-else執行時間是:00:00:00.5467479
三目運算符執行時間是:00:00:00.5035323
結論是:三目元算符效率高,效率比是:1.085825
這是第3次測試。
if-else執行時間是:00:00:00.5421469
三目運算符執行時間是:00:00:00.5563927
結論是:if-else效率高,效率比是:1.026277
這是第4次測試。
if-else執行時間是:00:00:00.5618836
三目運算符執行時間是:00:00:00.5647256
結論是:if-else效率高,效率比是:1.005058
這是第5次測試。
if-else執行時間是:00:00:00.6134296
三目運算符執行時間是:00:00:00.5420715
結論是:三目元算符效率高,效率比是:1.13164
這是第6次測試。
if-else執行時間是:00:00:00.6268572
三目運算符執行時間是:00:00:00.5196094
結論是:三目元算符效率高,效率比是:1.206401
這是第7次測試。
if-else執行時間是:00:00:00.6253764
三目運算符執行時間是:00:00:00.5601221
結論是:三目元算符效率高,效率比是:1.1165
這是第8次測試。
if-else執行時間是:00:00:00.5718210
三目運算符執行時間是:00:00:00.5748000
結論是:if-else效率高,效率比是:1.00521
這是第9次測試。
if-else執行時間是:00:00:00.6049427
三目運算符執行時間是:00:00:00.5391202
結論是:三目元算符效率高,效率比是:1.122092
這是第10次測試。
if-else執行時間是:00:00:00.5959451
三目運算符執行時間是:00:00:00.5438002
結論是:三目元算符效率高,效率比是:1.09589
這是第11次測試。
if-else執行時間是:00:00:00.5608417
三目運算符執行時間是:00:00:00.5116347
結論是:三目元算符效率高,效率比是:1.096176
這是第12次測試。
if-else執行時間是:00:00:00.6071996
三目運算符執行時間是:00:00:00.5168767
結論是:三目元算符效率高,效率比是:1.174747
這是第13次測試。
if-else執行時間是:00:00:00.5457763
三目運算符執行時間是:00:00:00.5193378
結論是:三目元算符效率高,效率比是:1.050908
這是第14次測試。
if-else執行時間是:00:00:00.5649781
三目運算符執行時間是:00:00:00.5140317
結論是:三目元算符效率高,效率比是:1.099111
這是第15次測試。
if-else執行時間是:00:00:00.5591931
三目運算符執行時間是:00:00:00.5283344
結論是:三目元算符效率高,效率比是:1.058408
這是第16次測試。
if-else執行時間是:00:00:00.5992742
三目運算符執行時間是:00:00:00.5424980
結論是:三目元算符效率高,效率比是:1.104657
這是第17次測試。
if-else執行時間是:00:00:00.6005640
三目運算符執行時間是:00:00:00.6131704
結論是:if-else效率高,效率比是:1.020991
這是第18次測試。
if-else執行時間是:00:00:00.5924647
三目運算符執行時間是:00:00:00.5352286
結論是:三目元算符效率高,效率比是:1.106938
這是第19次測試。
if-else執行時間是:00:00:00.6226258
三目運算符執行時間是:00:00:00.5280814
結論是:三目元算符效率高,效率比是:1.179034
*****按下回車鍵關閉窗口*****
我試過了using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
compare();
} private static void compare()
{
Console.WriteLine("*****比較if-else與三目運算符的效率*****");
for (int j = 1; j < 20; j++)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("這是第" + j + "次測試。");
Console.ForegroundColor = ConsoleColor.White; Stopwatch time2 = new Stopwatch(); time2.Start();
for (int i = 0; i < 100000000; i++)
{
int temp = 0;
temp = temp == 0 ? 1 : 0;
}
time2.Stop();
TimeSpan t2 = time2.Elapsed;
Console.WriteLine("三目運算符執行時間是:" + t2.ToString()); time2.Reset();
Stopwatch time1 = new Stopwatch(); time1.Start(); for (int i = 0; i < 100000000; i++)
{
int temp = 0;
if (temp == 1)
temp = 1;
else
temp = 0;
} time1.Stop();
TimeSpan t1 = time1.Elapsed;
Console.WriteLine("if-else執行時間是:" + t1.ToString()); time1.Reset(); string conclusion = (t1 < t2) ? "if-else效率高" : "三目元算符效率高";
float f1 = t1.Ticks;
float f2 = t2.Ticks;
float efficiency = (f1 < f2) ? f2 / f1 : f1 / f2;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("結論是:" + conclusion + ",效率比是:" + efficiency.ToString());
}
Console.WriteLine("*****按下回車鍵關閉窗口*****");
Console.ReadLine();
}
}
}執行結果:
*****比較if-else與三目運算符的效率*****
這是第1次測試。
三目運算符執行時間是:00:00:00.3729799
if-else執行時間是:00:00:00.4048039
結論是:三目元算符效率高,效率比是:1.085324
這是第2次測試。
三目運算符執行時間是:00:00:00.3732378
if-else執行時間是:00:00:00.4050782
結論是:三目元算符效率高,效率比是:1.085309
這是第3次測試。
三目運算符執行時間是:00:00:00.3731775
if-else執行時間是:00:00:00.4059195
結論是:三目元算符效率高,效率比是:1.087738
這是第4次測試。
三目運算符執行時間是:00:00:00.3725375
if-else執行時間是:00:00:00.4105408
結論是:三目元算符效率高,效率比是:1.102012
這是第5次測試。
三目運算符執行時間是:00:00:00.3728941
if-else執行時間是:00:00:00.4063272
結論是:三目元算符效率高,效率比是:1.089658
這是第6次測試。
三目運算符執行時間是:00:00:00.3729235
if-else執行時間是:00:00:00.4073699
結論是:三目元算符效率高,效率比是:1.092368
這是第7次測試。
三目運算符執行時間是:00:00:00.3741234
if-else執行時間是:00:00:00.4071542
結論是:三目元算符效率高,效率比是:1.088289
這是第8次測試。
三目運算符執行時間是:00:00:00.3757933
if-else執行時間是:00:00:00.4079853
結論是:三目元算符效率高,效率比是:1.085664
這是第9次測試。
三目運算符執行時間是:00:00:00.3727101
if-else執行時間是:00:00:00.4053652
結論是:三目元算符效率高,效率比是:1.087615
這是第10次測試。
三目運算符執行時間是:00:00:00.3726303
if-else執行時間是:00:00:00.4055132
結論是:三目元算符效率高,效率比是:1.088245
這是第11次測試。
三目運算符執行時間是:00:00:00.3725126
if-else執行時間是:00:00:00.4045227
結論是:三目元算符效率高,效率比是:1.08593
這是第12次測試。
三目運算符執行時間是:00:00:00.3736884
if-else執行時間是:00:00:00.4066239
結論是:三目元算符效率高,效率比是:1.088136
這是第13次測試。
三目運算符執行時間是:00:00:00.3734258
if-else執行時間是:00:00:00.4070227
結論是:三目元算符效率高,效率比是:1.089969
這是第14次測試。
三目運算符執行時間是:00:00:00.3725150
if-else執行時間是:00:00:00.4069392
結論是:三目元算符效率高,效率比是:1.09241
這是第15次測試。
三目運算符執行時間是:00:00:00.3730118
if-else執行時間是:00:00:00.4057763
結論是:三目元算符效率高,效率比是:1.087838
這是第16次測試。
三目運算符執行時間是:00:00:00.3715184
if-else執行時間是:00:00:00.4059337
結論是:三目元算符效率高,效率比是:1.092634
這是第17次測試。
三目運算符執行時間是:00:00:00.3731636
if-else執行時間是:00:00:00.4057730
結論是:三目元算符效率高,效率比是:1.087386
這是第18次測試。
三目運算符執行時間是:00:00:00.3731070
if-else執行時間是:00:00:00.4060530
結論是:三目元算符效率高,效率比是:1.088302
這是第19次測試。
三目運算符執行時間是:00:00:00.4042471
if-else執行時間是:00:00:00.4470545
結論是:三目元算符效率高,效率比是:1.105894
*****按下回車鍵關閉窗口*****
=====================
結論是一樣的:三目運算效率高。
int temp = 0;
if (temp == 1)
temp = 1;
else
temp = 0;编译器居然没把这段代码优化掉,真诡异
再说你这个代码本身写的也有问题,可以优化成
int temp = 0;
if (temp != 1)
temp = 0;
用这个逻辑
Radom r=new Radom();
int temp = r.next(100);
if (temp > 50 )
temp = 0;
else
temp = 1;从上面的IL来说,多一个BOOL变量不应该有8%的性能差异
for (int i = 0; i < 100000000; i++)
{
int temp = 0;
if (temp == 1) // if(temp == 0) temp = 1;
else
temp = 0;
}
...........
for (int i = 0; i < 100000000; i++)
{
int temp = 0;
temp = temp == 0 ? 1 : 0;
}
...........
我改過來了,代碼如下:using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
compare();
} private static void compare()
{
Console.WriteLine("*****比較if-else與三目運算符的效率*****");
for (int j = 1; j < 20; j++)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("這是第" + j + "次測試。");
Console.ForegroundColor = ConsoleColor.White; Stopwatch time2 = new Stopwatch(); time2.Start();
for (int i = 0; i < 100000000; i++)
{
int temp = 0;
temp = temp == 0 ? 1 : 0;
}
time2.Stop();
TimeSpan t2 = time2.Elapsed;
Console.WriteLine("三目運算符執行時間是:" + t2.ToString()); time2.Reset();
Stopwatch time1 = new Stopwatch(); time1.Start(); for (int i = 0; i < 100000000; i++)
{
int temp = 0;
if (temp == 0)
temp = 1;
else
temp = 0;
} time1.Stop();
TimeSpan t1 = time1.Elapsed;
Console.WriteLine("if-else執行時間是:" + t1.ToString()); time1.Reset(); string conclusion = (t1 < t2) ? "if-else效率高" : "三目元算符效率高";
float f1 = t1.Ticks;
float f2 = t2.Ticks;
float efficiency = (f1 < f2) ? f2 / f1 : f1 / f2;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("結論是:" + conclusion + ",效率比是:" + efficiency.ToString());
}
Console.WriteLine("*****按下回車鍵關閉窗口*****");
Console.ReadLine();
}
}
}但是測試結論是一樣的:*****比較if-else與三目運算符的效率*****
這是第1次測試。
三目運算符執行時間是:00:00:00.3745540
if-else執行時間是:00:00:00.4095213
結論是:三目元算符效率高,效率比是:1.093357
這是第2次測試。
三目運算符執行時間是:00:00:00.3734115
if-else執行時間是:00:00:00.4104114
結論是:三目元算符效率高,效率比是:1.099086
這是第3次測試。
三目運算符執行時間是:00:00:00.3726154
if-else執行時間是:00:00:00.4083870
結論是:三目元算符效率高,效率比是:1.096001
這是第4次測試。
三目運算符執行時間是:00:00:00.3706065
if-else執行時間是:00:00:00.4172922
結論是:三目元算符效率高,效率比是:1.125971
這是第5次測試。
三目運算符執行時間是:00:00:00.3719411
if-else執行時間是:00:00:00.4090403
結論是:三目元算符效率高,效率比是:1.099745
這是第6次測試。
三目運算符執行時間是:00:00:00.3700851
if-else執行時間是:00:00:00.4076994
結論是:三目元算符效率高,效率比是:1.101637
這是第7次測試。
三目運算符執行時間是:00:00:00.3738165
if-else執行時間是:00:00:00.4081124
結論是:三目元算符效率高,效率比是:1.091745
這是第8次測試。
三目運算符執行時間是:00:00:00.3707002
if-else執行時間是:00:00:00.4109855
結論是:三目元算符效率高,效率比是:1.108674
這是第9次測試。
三目運算符執行時間是:00:00:00.3714174
if-else執行時間是:00:00:00.4086975
結論是:三目元算符效率高,效率比是:1.100373
這是第10次測試。
三目運算符執行時間是:00:00:00.3695643
if-else執行時間是:00:00:00.4075393
結論是:三目元算符效率高,效率比是:1.102756
這是第11次測試。
三目運算符執行時間是:00:00:00.3721613
if-else執行時間是:00:00:00.4079646
結論是:三目元算符效率高,效率比是:1.096204
這是第12次測試。
三目運算符執行時間是:00:00:00.3707267
if-else執行時間是:00:00:00.4082541
結論是:三目元算符效率高,效率比是:1.101227
這是第13次測試。
三目運算符執行時間是:00:00:00.3699074
if-else執行時間是:00:00:00.4093336
結論是:三目元算符效率高,效率比是:1.106584
這是第14次測試。
三目運算符執行時間是:00:00:00.3697894
if-else執行時間是:00:00:00.4156721
結論是:三目元算符效率高,效率比是:1.124078
這是第15次測試。
三目運算符執行時間是:00:00:00.3703495
if-else執行時間是:00:00:00.4093667
結論是:三目元算符效率高,效率比是:1.105352
這是第16次測試。
三目運算符執行時間是:00:00:00.3734850
if-else執行時間是:00:00:00.4108626
結論是:三目元算符效率高,效率比是:1.100078
這是第17次測試。
三目運算符執行時間是:00:00:00.3728530
if-else執行時間是:00:00:00.4145881
結論是:三目元算符效率高,效率比是:1.111934
這是第18次測試。
三目運算符執行時間是:00:00:00.3732783
if-else執行時間是:00:00:00.4095246
結論是:三目元算符效率高,效率比是:1.097103
這是第19次測試。
三目運算符執行時間是:00:00:00.3711524
if-else執行時間是:00:00:00.4105889
結論是:三目元算符效率高,效率比是:1.106254
*****按下回車鍵關閉窗口*****