2016-07-22 36 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条件下执行相同的解除引用。所以,在分配之前,在测试中根本没有优势。比较的意思是“减法和检查零标志”),并且涉及从存储器中读取变量的值,赋值意味着将值写入内存,读写内存是等价的。据我所知,编译器不使用这种优化技巧。