我通常使用的是這樣的:轉讓前值得檢查價值嗎?
if(!variable.Equals(value))
{
variable = value;
}
我學會了做這一點,但我只是想知道,如果它是值得的。比較和分配的成本是多少?我猜這不是,但是C#以某種方式優化了將相同數據賦值給變量的操作?
由於
我通常使用的是這樣的:轉讓前值得檢查價值嗎?
if(!variable.Equals(value))
{
variable = value;
}
我學會了做這一點,但我只是想知道,如果它是值得的。比較和分配的成本是多少?我猜這不是,但是C#以某種方式優化了將相同數據賦值給變量的操作?
由於
比較操作是用於CPU更硬和花費比分配操作多一點時間。
只有分配比單獨比較更快,但如果variable
不等於value
您將執行兩個操作 - 比較和分配 - 更多時間。
所以,沒有比較分配將更快地執行即使variable
等於value
:
variable = value;
它可以通過值得僅當varible
值arleady value
,你想擁有超快速和優化的代碼。但在我看來,利潤將是 不明顯。你應該使用variable = value;
,它會正常工作,代碼會更清晰。
賦值操作本身非常便宜(快速)。解引用變量可能會很昂貴。例如,product[a.f() + 3].age = 2;
將執行大量計算以達到所需的age
的位置。在你的情況下,你在if
條件下執行相同的解除引用。所以,在分配之前,在測試中根本沒有優勢。比較的意思是「減法和檢查零標誌」),並且涉及從存儲器中讀取變量的值,賦值意味着將值寫入內存,讀寫內存是等價的。據我所知,編譯器不使用這種優化技巧。
我猜猜該作業更快 – Candide
@KaeL對於屬性很明顯,因爲INotifyPropertyChanged的相當常見的實現你不想引發不必要的事件,這個問題有點不同 – Qerts