2016-12-02 87 views
-7

有些情況下,我們有一個變量中的值,如果X是該變量,我們想要一個if條件並比較值是否更大那麼0那麼哪個方法會優化一個。什麼是C#中的X> 0或X!= 0更優化的方式

X> 0或X!= 0

有人可以指定邏輯。我們可以以C#爲例。

+1

這種變化的影響是非常小的,它不會有任何影響,除非你重複它每次secon幾十億次d。 – Euphoric

+11

'X!= 0'不檢查值是否大於0 *。它檢查它是否不等於0.這是一個不同的事情(除非你的變量是無符號的)。另外,如果這是您的表現瓶頸,我會非常驚訝。 – MarcinJuraszek

+0

@Euphoric對速度沒有任何影響。如果語句在0.072秒內完成,那麼10億個循環的i> 0或i!= 0。 – Verkade89

回答

4

理想的情況下,這兩個語句將最終被映射到一個單一的CPU指令

jg - jump if greater 
jne - jump if not equal 

突然,你的問題變得更加複雜,因爲

  • 我們需要知道哪些CPU究竟會被執行聲明
  • 無論是8位,16位,32位還是64位比較
  • 是否會跳遠或跳躍
  • 無論是帶符號

您需要找到了,不僅看的IL代碼,而且在由JIT編譯器生成的彙編指令。這使得它更復雜:

  • JIT編譯可能依賴於.NET Framework版本
  • 的JIT MIT重新編譯上飛你的方法

總而言之:不在乎。 YAGNI,這是過早的優化。

1

從技術上講,這些運營商

X > 0 
X != 0 

不相等;你其實(在一般情況下)應選擇

之間
X > 0 || X < 0 
X != 0 

明確和直接比較X != 0是更具可讀性,而且稍微快。在內置類型int,float,decimal等的情況下,性能差異是可忽略。在用戶定義的類等式(==!=)的情況下,通常更快,因爲比較(><; >=<=)通常涉及IComparer<T>IComparable<T>接口與複雜的算法。

摘要:堅守X != 0

  1. 這是更具可讀性和明確
  2. 在的情況下,內置的原始類型的表現並不關注
  3. 在用戶定義類型的情況下,X != 0有一個很好的機會更快
+0

這取決於類型。對於無符號值,它可能是相同的。 –

相關問題