在分配之前检查价值是否值得?

时间:2016-07-22 07:34:29

标签: c# .net

我通常使用这样的东西:

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

我学会了这样做,但我只是想知道它是否值得。比较与分配的成本是多少?我想它不是,但C#是否以某种方式针对将相同数据赋值给变量的操作进行了优化?

由于

3 个答案:

答案 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;,它将正常工作,代码将更清晰。