首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

*比較if-else與三目運算符的效率*该怎么解决

2011-12-30 
*****比較if-else與三目運算符的效率*****C# codeusing Systemusing System.Collections.Genericusing S

*****比較if-else與三目運算符的效率*****

C# code
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
*****按下回車鍵關閉窗口*****

========================

所以我的問題來了,爲什麽三目運算符的效率高呢?


[解决办法]
扩展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;
}

[解决办法]
1.表達式1:為真的概率 比 表達式2 為真的概率要大的話
如果你的條件是:||或 && 來結合的話 按如下的寫法:
if(表達式1||表達式2)
{
}
Else
{
}
If(表達式2&& 表達式1)
{
}
Else
{
}
要比其相應得其它組合的運行效率高些,
總之 如果條件是以 || 來結合的 那就把為真率高的放在前面
如果條件是以 && 來結合的 那就把為真率低的放在前面 這樣有助於提高程式運行效率.


[解决办法]

探讨

这也值得推荐?孔乙己吗...

[解决办法]
没深究过 以前一直认为三目运算符高些~~~
看到网上有的对
C/C++ code
#include <stdio.h>intmain(){ int a = 1, b = 2, c; if(a < b)  c = a; else  c = b; c = a < b ? a : b; return 0;}
[解决办法]
*****比較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
*****按下回車鍵關閉窗口*****

[解决办法]

int temp = 0;
if (temp == 1)
temp = 1;
else
temp = 0;



编译器居然没把这段代码优化掉,真诡异
再说你这个代码本身写的也有问题,可以优化成
int temp = 0;
if (temp != 1)
temp = 0;

[解决办法]

探讨
扩展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……

热点排行