如果我将相同的值分配两次(对于同一个变量),是否会忽略该语句?

时间:2013-09-19 14:48:47

标签: c# .net clr variable-assignment

例如,

int i = 0;

i = new Random().Next();

如果new Random().Next();返回0,CLR会注意到不必要的赋值而不执行该语句,或者该语句是否仍会执行?

1 个答案:

答案 0 :(得分:3)

无论如何我们会执行和分配。 CLR不会进行这种优化。通常JIT会进行优化,但在这种情况下不会。

我认为这种优化也不会实现。

如果编译器检查旧值是否等于新值并且跳过会严重降低性能,请考虑要执行的所有分配。如果您有overridden Equals,那么这会对性能产生更大影响,并且会进行一些计算成本高昂的检查以确定相等性。这很伤人。不是吗?

一旦我编写了一个基准测试,看看是否检查相同的值并忽略赋值更好盲目地覆盖该值。结果说盲目地覆盖价值。我现在没有感兴趣的代码,人们可以尝试自己并评估结果。