【问题标题】:Performance issue: if (isChecked) vs. if (isChecked == true)性能问题:if (isChecked) 与 if (isChecked == true)
【发布时间】:2015-01-01 11:31:56
【问题描述】:

CompiletimeRuntime 中使用 if (isChecked)if (isChecked == true) 是否存在任何性能问题?

【问题讨论】:

  • ..两者都是一样的。语法和语义
  • 性能是一样的,只是if (isChecked)在键盘上少了6个字符
  • @Shaharyar:不,它们在语法上并不相同——它们有不同的语法树。
  • 当然有。任何评论第二个版本的人都会失去一个小时的生命,试图弄清楚为什么你会这样写。那是他永远不会回来的十万亿个周期。
  • @JonSkeet 所以你的意思是它们在编译时有区别?

标签: c# performance if-statement runtime compile-time


【解决方案1】:

没有任何性能问题。两种情况下生成的 IL 完全相同,当 IL 相同时,它的执行将相同。所以没有运行时差异。

bool x = true;
if (x == true) // or (x)
    Console.WriteLine("True");

IL_0001:  ldc.i4.1    
IL_0002:  stloc.0     // x
IL_0003:  ldloc.0     // x
IL_0004:  ldc.i4.0    
IL_0005:  ceq         
IL_0007:  stloc.1     // CS$4$0000
IL_0008:  ldloc.1     // CS$4$0000
IL_0009:  brtrue.s    IL_0016
IL_000B:  ldstr       "True"
IL_0010:  call        System.Console.WriteLine

安装LINQPad,下次自己试试;)

至于编译时,如 cmets 中所述,生成的 abstract syntax tree 实际上会有所不同。这是 if(x) 的 AST 的相关部分

现在if(x == true)

你可以看到区别。

【讨论】:

  • @Mohamadshiralizadeh 我希望它能解决你关于这个话题的所有问题。
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
相关资源
最近更新 更多