读书人

*比if-else三目算符的效率*该怎

发布时间: 2011-12-30 23:30:45 作者: rapoo

*****比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……

读书人网 >C#

热点推荐