有些情況下,我們有一個變量中的值,如果X是該變量,我們想要一個if條件並比較值是否更大那麼0那麼哪個方法會優化一個。什麼是C#中的X> 0或X!= 0更優化的方式
X> 0或X!= 0
有人可以指定邏輯。我們可以以C#爲例。
有些情況下,我們有一個變量中的值,如果X是該變量,我們想要一個if條件並比較值是否更大那麼0那麼哪個方法會優化一個。什麼是C#中的X> 0或X!= 0更優化的方式
X> 0或X!= 0
有人可以指定邏輯。我們可以以C#爲例。
理想的情況下,這兩個語句將最終被映射到一個單一的CPU指令
jg - jump if greater
jne - jump if not equal
突然,你的問題變得更加複雜,因爲
您需要找到了,不僅看的IL代碼,而且在由JIT編譯器生成的彙編指令。這使得它更復雜:
總而言之:不在乎。 YAGNI,這是過早的優化。
從技術上講,這些運營商
X > 0
X != 0
是不相等;你其實(在一般情況下)應選擇
之間X > 0 || X < 0
X != 0
明確和直接比較X != 0
是更具可讀性,而且稍微快。在內置類型int
,float
,decimal
等的情況下,性能差異是可忽略。在用戶定義的類等式(==
和!=
)的情況下,通常更快,因爲比較(>
,<
; >=
,<=
)通常涉及IComparer<T>
,IComparable<T>
接口與複雜的算法。
摘要:堅守X != 0
:
X != 0
有一個很好的機會更快這取決於類型。對於無符號值,它可能是相同的。 –
這種變化的影響是非常小的,它不會有任何影響,除非你重複它每次secon幾十億次d。 – Euphoric
'X!= 0'不檢查值是否大於0 *。它檢查它是否不等於0.這是一個不同的事情(除非你的變量是無符號的)。另外,如果這是您的表現瓶頸,我會非常驚訝。 – MarcinJuraszek
@Euphoric對速度沒有任何影響。如果語句在0.072秒內完成,那麼10億個循環的i> 0或i!= 0。 – Verkade89