[英]Two if conditions or one if with OR
我有一個小疑問
我有以下代碼
bool res= false;
if(cond1)
{
res = true;
}
if(cond2)
{
res = true;
}
如果我放置以下代碼,則代替此
if(cond1 || cond2)
{
res = true;
}
哪個代碼段將更優化?
我相信這將是第二個,因為我避免了If條件。
好吧,我不知道是否合適,但是:在這種情況下,這並不重要 。
不要過多地進行微優化 。
但是要回答您的問題,請堅持使用易於理解的問題。
最快的解決方案是這樣的:
bool res = cond1 || cond2;
這是微優化。 選擇一個更具可讀性的:
return cond1 || cond2;
性能提升確實不會引起注意,但是第二個比第一個更具可讀性和邏輯性。
唯一的區別是在cond1為true的情況下-因此,不會測試第二個示例cond2。 如果cond1為false,則將在兩種情況下都對cond2進行測試。
不幸的是,不是每個人都看到Or(|)和Condional Or(||)之間的區別。 如果在第二個片段中使用“或”,則沒有區別(兩個條件都被評估)。 使用“條件或”表示如果第一個條件(從左到右)為真,則甚至不評估下一個條件。
這是一個非常有用的功能。
第二個選項更加優化。 在第一個選項中,它將始終檢查cond2。 您可以在option1中將if改為else來進行優化。
這里的性能差異不會很明顯。但是肯定第二個更好。
1)可讀性更好。
2)第二個片段比第一個更合乎邏輯。
3)如果我們看到IL
與ILDASM
然后在組裝線的第一個片段的數量會比第二個更。 因此,第一個代碼段的代碼大小更大。 裝配的尺寸越小越好。
如果cond1
和cond2
不是簡單的布爾值,而是具有副作用的屬性或函數,則存在差異,因為在第一個版本中,將始終評估cond2
並因此發生副作用。
假設每個cond
真假cond
大致相等,並假設每個cond
占用一個STU(有效時間單位),則||
總體預期為1.5 STU,而不是2,這將花費1 STU,而一半時間是2 STU。
如果STU是十億分之一秒,則可能無關緊要。
如果STU是一個世紀,它可能會做到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.