2010-06-14 63 views
3

想象一下,我有一個變量稱爲X. 讓我們說,每5秒我想讓X =真。 (在這5秒之間可以是真或假,但是在5秒鐘之後重置爲真)。什麼更有效?檢查==或只是變量變量?

檢查值是否已經爲true會更有效嗎?如果不是,請將其重新分配爲true?或者只是X =真?

換句話說,哪個會跑得快?

if(x==false){ 
    x = true; 
} 

VS

x = true; 

一方面,第一程序不會發生變異的變量,如果它不就得了。另一方面,第二個程序不需要檢查X等於什麼;它潛入水中。

+1

它不會有任何明顯的區別(除非設置x有副作用,例如調度事件,引起聽衆反應等,在這種情況下,答案是「取決於」)。在程序邏輯中做任何有意義的事情。 – 2010-06-14 17:14:20

回答

8
  • 它幾乎總是沒有關係。編寫最容易理解和維護的代碼。只有在必要時才進行優化。
  • 確定的最好方法就是測試它。剖析你的代碼。
  • 哪個更快可能取決於瀏覽器。
  • 哪個更快取決於變量是否通常爲真或通常爲false。
  • 話雖如此,我猜想在大多數情況下設置一個變量而不進行測試會更快。
+0

同意。我會把我的錢變成100%,而不是測試100%並將其改爲50%。 – 2010-06-14 17:01:13

+0

@Mike M.和50%是一個假設,可能不是真的 - 只是補充說。而且我可以看到cwap也提到了這一點。 – 2010-06-14 17:02:24

+1

如果'x'不只是一個簡單的變量,而是例如一個「類」或一個大型數組,那麼檢查然後設置會更好。 – 2010-06-14 18:29:16

4

實際上取決於您的數據:)

如果x ==假90%的時間,然後直接分配到X會更快。

這是那些地方,你可能不希望擔心效率的一個,如果你真的這樣做,輪廓吧..

+0

+1用於思考虛假與真實的頻率。 – 2010-06-14 17:03:47

1

效率您正在試圖通過這分鐘獲得比效率通過您的整體設計的質量獲得。

1

免責聲明/警告:

這是一個微優化,絕不會影響程序的效率的方式,是用戶衡量的。如果您關閉所有編譯器優化,並運行一個優秀的分析器,您可能能夠量化這些影響 - 但是沒有用戶會注意到。

對於您的情況尤其如此,所討論的代碼僅在每隔幾秒鐘運行一次。花費時間進行分析可能會更好地改進應用程序的其他部分。

此外,在這些情況下,可讀性應始終優先於非瓶頸微優化(儘管我的回答僅考慮到運行時效率)。因此,我建議您在這種情況下使用的代碼是x=true,因爲它是最容易閱讀和理解的。

最後,如果添加檢查可以提高速度,編譯器可能已經知道並且會爲你做,所以你不會出錯x=true(這就是爲什麼你應該在運行探查器之前關閉優化)。


答:

唯一正確的方法算出這個是通過分析。您可能會發現0測試(x == false)基本上沒有花時間,因此當x變爲true時,由於節省了時間,因此值得包括。或者您可能會發現測試需要足夠長的時間,以至於當x變成錯誤時浪費太多時間。

我的猜測是測試是不必要的。這是因爲0測試和其他按位操作(以及等等)都非常快,所以我通常會將它們視爲具有相同的基本時間量。如果0測試的時間與「或」操作的時間相同(設置爲真),那麼0測試會浪費時間。當然,剖析可能證明我錯了,我的猜測是基於對按位運算的寬鬆假設,所以如果你選擇運行一個剖析器並找出它,我肯定會對結果感興趣。