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

吕津 2010-12-15 02:33:49
加精

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

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

所以我的問題來了,爲什麽三目運算符的效率高呢?
...全文
7334 146 打赏 收藏 转发到动态 举报
写回复
用AI写文章
146 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
关注这个问题,多重循环最内层存在if语句,速度减慢很多。
claymore1114 2010-12-22
  • 打赏
  • 举报
回复
几乎一样。
个人习惯问题, 要的是 简洁,美观。 我 习惯 switch
vwxyzh 2010-12-22
  • 打赏
  • 举报
回复
Debug方式下的性能测试不能说明任何问题。。。
Release方式下两者性能相当,互有胜负(误差)
weakey 2010-12-22
  • 打赏
  • 举报
回复
条件是多个还用三目干嘛?
w5588660 2010-12-22
  • 打赏
  • 举报
回复
不错不错
niech1112 2010-12-22
  • 打赏
  • 举报
回复
了解一下。
卡索瓦 2010-12-22
  • 打赏
  • 举报
回复
三元运算符较快些
hpy12345 2010-12-21
  • 打赏
  • 举报
回复
这个是什么境界了 看不懂
zjx198934 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 100 楼 wuyazhe 的回复:]
测试的不是很准确,你条件单一了,如果条件是多个,你就会发现if快了。
[/Quote]
而且比较的两者不能等同! 能用if else都能用三目代替吗?
cdyitian 2010-12-21
  • 打赏
  • 举报
回复
楼主精神可嘉
Qinyoulan108 2010-12-21
  • 打赏
  • 举报
回复
看得我头都大了 晕!!!!
两把扇子 2010-12-21
  • 打赏
  • 举报
回复
楼主玩的很乐和么,感觉在引导我们上课自学
keanu_woo 2010-12-20
  • 打赏
  • 举报
回复
如果操作的是值类型,那么 BOOL ? A : B 可能是用空间换取了一点点时间,先把BOOL,A和B都放stack里,而if (BOOL) return A ELSE return B 多了一点点找A和B的时间,猜的。

楼主没有测返回引用类型的情况,可能执行时间就非常接近了。
海会圣贤 2010-12-20
  • 打赏
  • 举报
回复
楼主真蛋痛。
  • 打赏
  • 举报
回复
学习中
comewisdom 2010-12-19
  • 打赏
  • 举报
回复
学习学习学习....................
comewisdom 2010-12-19
  • 打赏
  • 举报
回复
学习学习学习....................
yangquanlaohou 2010-12-19
  • 打赏
  • 举报
回复
知道结果 知道怎么用就可以了
至于原因 不用去过多的关心
QQRN 2010-12-19
  • 打赏
  • 举报
回复
我的电脑上测试结果是if-else速度比较快
另外
我用VB.NET改写来试了下,结果很惊人啊...........
检查N次,还以为我少打了个0
看来VB.NET下面还是用if-else速度快得多.........

Dim j As Integer
For j = 1 To 20
Console.ForegroundColor = ConsoleColor.Yellow
Console.WriteLine("這是第" + CStr(j) + "次測試。")
Console.ForegroundColor = ConsoleColor.White

Dim time1 As Stopwatch = New Stopwatch
time1.Start()
For i As Integer = 1 To 100000000
Dim temp As Integer = 0
If temp = 0 Then
temp = 1
Else
temp = 0
End If
Next
time1.Stop()
Dim t1 As TimeSpan = time1.Elapsed
Console.WriteLine("if-else執行時間是:" + t1.ToString())
time1.Reset()

Dim time2 As Stopwatch = New Stopwatch
time2.Start()
For i As Integer = 1 To 100000000
Dim temp As Integer = 0
temp = IIf(temp = 0, 1, 0)
Next

time2.Stop()
Dim t2 As TimeSpan = time2.Elapsed
Console.WriteLine("三目運算符執行時間是:" + t2.ToString())
time2.Reset()

Dim conclusion As String = IIf(t1 < t2, "if-else效率高", "三目元算符效率高")
Dim f1 As Single = t1.Ticks
Dim f2 As Single = t2.Ticks
Dim efficiency As Single = IIf(f1 < f2, f2 / f1, f1 / f2)
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine("結論是:" + conclusion + ",效率比是:" + efficiency.ToString())
Next
Console.WriteLine("*****按下回車鍵關閉窗口*****")
Console.ReadLine()

這是第1次測試。
三目運算符執行時間是:00:00:06.3230223
if-else執行時間是:00:00:00.8227053
結論是:if-else效率高,效率比是:7.685647
這是第2次測試。
三目運算符執行時間是:00:00:06.2964915
if-else執行時間是:00:00:00.8204084
結論是:if-else效率高,效率比是:7.674826
這是第3次測試。
三目運算符執行時間是:00:00:06.2454348
if-else執行時間是:00:00:00.8029087
結論是:if-else效率高,效率比是:7.778512
這是第4次測試。
三目運算符執行時間是:00:00:05.8017552
if-else執行時間是:00:00:00.8030542
結論是:if-else效率高,效率比是:7.224612
這是第5次測試。
三目運算符執行時間是:00:00:05.7216808
if-else執行時間是:00:00:00.7969473
結論是:if-else效率高,效率比是:7.179497
這是第6次測試。
三目運算符執行時間是:00:00:05.6862472
if-else執行時間是:00:00:00.8005212
結論是:if-else效率高,效率比是:7.103181
這是第7次測試。
三目運算符執行時間是:00:00:05.7198965
if-else執行時間是:00:00:00.8063826
結論是:if-else效率高,效率比是:7.093278
這是第8次測試。
三目運算符執行時間是:00:00:05.6953989
if-else執行時間是:00:00:00.8042091
結論是:if-else效率高,效率比是:7.081987
這是第9次測試。
三目運算符執行時間是:00:00:05.7159379
if-else執行時間是:00:00:00.8079968
結論是:if-else效率高,效率比是:7.074209
這是第10次測試。
三目運算符執行時間是:00:00:05.7018749
if-else執行時間是:00:00:00.8042790
結論是:if-else效率高,效率比是:7.089424
這是第11次測試。
三目運算符執行時間是:00:00:05.6957549
if-else執行時間是:00:00:00.8060879
結論是:if-else效率高,效率比是:7.065923
這是第12次測試。
三目運算符執行時間是:00:00:05.7030010
if-else執行時間是:00:00:00.8035761
結論是:if-else效率高,效率比是:7.097026
這是第13次測試。
三目運算符執行時間是:00:00:05.6981032
if-else執行時間是:00:00:00.8030615
結論是:if-else效率高,效率比是:7.095476
這是第14次測試。
三目運算符執行時間是:00:00:05.6991176
if-else執行時間是:00:00:00.8073746
結論是:if-else效率高,效率比是:7.058827
這是第15次測試。
三目運算符執行時間是:00:00:05.7052885
if-else執行時間是:00:00:00.8109994
結論是:if-else效率高,效率比是:7.034886
這是第16次測試。
三目運算符執行時間是:00:00:05.6872250
if-else執行時間是:00:00:00.8025310
結論是:if-else效率高,效率比是:7.086611
這是第17次測試。
三目運算符執行時間是:00:00:05.7004289
if-else執行時間是:00:00:00.8123797
結論是:if-else效率高,效率比是:7.016951
這是第18次測試。
三目運算符執行時間是:00:00:05.6904397
if-else執行時間是:00:00:00.8052632
結論是:if-else效率高,效率比是:7.066559
這是第19次測試。
三目運算符執行時間是:00:00:05.7090010
if-else執行時間是:00:00:00.8043837
結論是:if-else效率高,效率比是:7.09736
這是第20次測試。
三目運算符執行時間是:00:00:05.7115611
if-else執行時間是:00:00:00.8060851
結論是:if-else效率高,效率比是:7.085556
*****按下回車鍵關閉窗口*****
HegcH 2010-12-19
  • 打赏
  • 举报
回复
根据二楼的IL,if对应的是:
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_0016: ldloc.1
IL_0017: brfalse.s IL_001c
这个体现在效率上吧?(虽然没有搞明白为什么if那么多的ceq操作)
加载更多回复(126)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧