在赋值之前检查变量的值是否有意义,这样做是否值得?

3
我通常使用类似于以下的代码:
if(!variable.Equals(value))
{
    variable = value;
}

我学过这种做法,但我想知道它是否值得。比较的成本与赋值相比如何?我猜不值得,但C#是否针对将相同数据分配给变量的操作进行了优化?

谢谢


我猜这个赋值操作更快。 - Candide
@KaeL 对于属性来说很清楚,因为INotifyPropertyChanged的实现非常普遍,你不想触发不必要的事件,但这个问题略有不同。 - Qerts
3个回答

3
比较操作比赋值操作更难处理,需要花费更多的时间。只有赋值操作比仅仅进行比较操作快,但如果“变量”不等于“值”,则执行两个操作-比较和赋值-需要更多时间。因此,即使“变量”等于“值”,没有比较的赋值操作也会更快执行。
variable = value;

1
赋值操作本身非常便宜(快)。解引用变量可能很昂贵。例如,product[a.f() + 3].age = 2;将执行大量计算以到达所需age的位置。在您的情况下,在if条件中进行相同的解引用。因此,在分配之前测试没有任何优势。比较意味着“减法和检查零标志”,并涉及从内存读取变量的值。分配意味着向内存写入值。读写内存是等效的。据我所知,编译器不使用此优化技巧。

-1

只有当变量的值已经是,并且您想要拥有超快速和优化的代码时,它才有价值。但在我看来,收益是微不足道的。您应该使用变量=值;,这样代码将更清晰,也能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接