【问题标题】:If I assign the same value twice (to the same variable), will the statement be ignored?如果我两次分配相同的值(给同一个变量),该语句会被忽略吗?
【发布时间】:2013-09-24 17:31:42
【问题描述】:

例如,

int i = 0;

i = new Random().Next();

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

【问题讨论】:

  • 编译器 可能会删除= 0; 赋值,因为i 会立即被覆盖。但 CLR 仍会从 Random().Next(); 调用中分配零。

标签: c# .net clr variable-assignment


【解决方案1】:

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

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

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

一旦我写了一个基准来看看是检查相同的值并忽略赋值更好还是盲目地覆盖值更好。结果表明盲目地覆盖该值更好。暂时没有代码,有兴趣的可以自己试试看结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2010-11-28
    相关资源
    最近更新 更多