2016-07-22 59 views
2

我通常使用的是這樣的:轉讓前值得檢查價值嗎?

if(!variable.Equals(value)) 
{ 
    variable = value; 
} 

我學會了做這一點,但我只是想知道,如果它是值得的。比較和分配的成本是多少?我猜這不是,但是C#以某種方式優化了將相同數據賦值給變量的操作?

由於

+0

我猜猜該作業更快 – Candide

+0

@KaeL對於屬性很明顯,因爲INotifyPropertyChanged的相當常見的實現你不想引發不必要的事件,這個問題有點不同 – Qerts

回答

2

比較操作是用於CPU更硬和花費比分配操作多一點時間。

只有分配比單獨比較更快,但如果variable不等於value您將執行兩個操作 - 比較和分配 - 更多時間。

所以,沒有比較分配將更快地執行即使variable等於value

variable = value; 
-1

它可以通過值得僅當varible值arleady value,你想擁有超快速和優化的代碼。但在我看來,利潤將是 不明顯。你應該使用variable = value;,它會正常工作,代碼會更清晰。

1

賦值操作本身非常便宜(快速)。解引用變量可能會很昂貴。例如,product[a.f() + 3].age = 2;將執行大量計算以達到所需的age的位置。在你的情況下,你在if條件下執行相同的解除引用。所以,在分配之前,在測試中根本沒有優勢。比較的意思是「減法和檢查零標誌」),並且涉及從存儲器中讀取變量的值,賦值意味着將值寫入內存,讀寫內存是等價的。據我所知,編譯器不使用這種優化技巧。