哪一个更快?

时间:2011-05-28 09:22:13

标签: c#

(编辑:b是现有的布尔值)

b = (a > c);

if (a > c)
    b = true;
  • 一般?
  • 考虑到在我的情况下(a> c)大部分时间都是假的事实?

编辑:我知道收益会很小,即使这部分代码会被执行很多次。但我仍然在理论上回答。

谢谢

5 个答案:

答案 0 :(得分:17)

正如Darin所说,你应该使用任何更易读的速度差如果任何无关紧要......但值得注意的是它们并不等同。如果这是在一个方法内(所以b是一个局部变量),那么第一种方法将b 明确分配,而第二种方法则不会。

就我个人而言:

bool b = a > c;

我认为不需要额外的括号,我更倾向于在声明时进行初始化。如果我 使用if块,我肯定会使用大括号......

答案 1 :(得分:9)

在这里谈论更快在实践中没有意义,因为这是一个你不应该做的微优化。至于你应该使用哪一个,使用一个对你更具可读性的那个(第一个对我来说更具可读性)。

答案 2 :(得分:3)

第二个完全没用。之后并非明确赋值变量。所以你无法阅读它,需要在使用之前再次分配它,这会覆盖你的作业结果。

但除非真的有必要,否则我不会担心这种微观优化。在这种情况下,无论如何都需要分析和检查生成的汇编代码。

如果您指定参考类型字段(非本地变量),则AFAIK类似的优化是有意义的。由于参考字段的分配具有与GC交互相关的一些额外成本。但是局部变量我除了没有显着差异。在某些情况下,赋值可能稍微更快,因为如果分支预测失败,则条件有问题。

答案 3 :(得分:0)

除了其他答案中提到的错误之外,在像C#这样的托管语言中,这些优化绝对没有用处。在实际评估此代码之前,有很多层次的翻译。如果您使用Assembly或Ye Olde C ++,那么这些优化才有意义。

答案 4 :(得分:0)

那么,第二个版本将在硬盘上占用更多内存(如果我们不考虑优化等) - 即文件会更大。

第一个是这样的:

  1. a > b存储在x
  2. mov b,x
  3. 第二个将是这样的:

    1. a > b存储在x
    2. x是真的吗?

      是:

    3. b = true

    4. 继续执行

      没有

    5. 继续执行