我通常使用这样的东西:
if(!variable.Equals(value))
{
variable = value;
}
我学会了这样做,但我只是想知道它是否值得。比较与分配的成本是多少?我想它不是,但C#是否以某种方式针对将相同数据赋值给变量的操作进行了优化?
由于
答案 0 :(得分:2)
比较操作对CPU来说更难,并且比分配操作需要更多的时间。
只有分配比仅比较快,但如果variable
不等于value
,您将执行两项操作 - 比较和分配 - 更多时间。
因此,即使variable
等于value
,也可以更快地执行无比较的作业:
variable = value;
答案 1 :(得分:1)
赋值操作本身非常便宜(快速)。取消引用变量可能很昂贵。例如,product[a.f() + 3].age = 2;
会进行大量计算以达到所需age
的位置。在您的情况下,您在if
条件下执行相同的解除引用。因此,在分配之前测试中没有任何优势。比较意味着"减法和检查零标志),并涉及从内存中读取变量的值。赋值意味着将值写入内存。读写内存是等效的。据我所知,编译器不使用这种优化技巧。
答案 2 :(得分:-1)
只有当varible
的值为value
并且您希望拥有超快速且优化的代码时才值得。但在我看来,利润将是
不易察觉。您应该使用variable = value;
,它将正常工作,代码将更清晰。