2012-07-25 218 views
29

可能重複:
Is the conditional operator slow?Ternary?運營商VS傳統的if-else運營商在C#

我在C#中?運營商的海量用戶。然而,我的項目經理經常警告我說,與大規模應用中的If-Else報表相比,使用?運營商可能會花費一些性能。所以我被告知要避免使用它。不過,我喜歡使用它,因爲它簡潔明快,並且保持代碼清潔。

使用?運算符時是否有這樣的性能開銷?

+0

你可以在這裏得到很好的答案...在這 http://stackoverflow.com/questions/3312786/benefits-of-using-the-conditional-ternary-operator – 2012-07-25 05:15:35

+0

請考慮閱讀此線程:http ://stackoverflow.com/questions/2259741/is-the-conditional-operator-slow。恕我直言,你的經理是曖昧的 – 2012-07-25 05:16:53

+0

我不認爲其他鏈接的問題解決假設的性能開銷(我不知道它會從哪裏來)。 – Thilo 2012-07-25 05:20:54

回答

68

我跑了1億個三元運算符和1億個If-Else語句並記錄了每個運算符的性能。這裏是代碼:

Stopwatch s = new Stopwatch(); 
// System.Diagnostics Stopwatch 
int test = 0; 
s.Start(); 
for(int a = 0; a < 100000000; a++) 
    test = a % 50 == 0 ? 1 : 2; 
s.Stop(); 

s.Restart(); 
for(int b = 0; b < 100000000; b++) 
{ 
    if(b % 50 == 0) 
     test = 1; 
    else 
     test = 2; 
} 
s.Stop(); 

這是結果(運行在英特爾凌動1。66GHz的有1GB RAM和我知道,它吮吸):

  • 三元運營商:5986毫秒或每各運營商0.00000005986秒。

  • If-Else:每條語句5667毫秒或0.00000005667秒。

別忘了我跑了1億,而且我覺得這兩個事情差不多0.00000000319秒之差。

+12

這些統計數據。 – 2012-07-25 05:46:14

+1

我愛你實際上做到了! – 2017-08-15 18:27:24

19

編號

使用什麼讓你的代碼可讀。如果if語句這樣做,請使用它們。如果三元操作員這樣做,使用它們。

無論如何,它們很可能會編譯到同一個IL。

在任何情況下,會減慢你的應用程序的東西可能是數據庫或網絡或硬盤驅動器......除了你是否使用if語句或三元表達式。

2

從我個人的角度來看,我沒有看到三元運算符和if語句之間的任何性能差異。許多編程語言都支持它,並且十進制運算符更像開發人員友好的,與傳統的If-else運算符一般可以理解。

http://en.wikipedia.org/wiki/%3F%3a

10

沒有理由期待在性能上有什麼區別。

在我看來,三元運算符只能用於三個操作數都非常簡潔易讀的情況。否則,我認爲它有可能使代碼難以閱讀。

我認爲很多人通過將太多邏輯干擾到一長串代碼中來誤用這個操作符。除非整行少於80個字符,否則我個人不會使用它。

好:

return isFunky ? funkyValue : null;

壞:

return (thisThing == thatThing && (anotherThing != null || ! IsThisTrue())) ? someThing.GetThis().GetThat() : yetAnotherThing.GetBlah().GetFoo(); 

我見過的人做的比上面的要差很多。我認爲他們應該放棄他們的三元特權!

5

這很難讀取三元操作。如果你使用嵌套條件,理解三元將成爲開銷。如果有更多的條件,儘量避免三元。