c# - 这个简单的条件运算符会在编译时优化吗? (。网)

标签 c# .net performance optimization conditional-operator

使用遗留代码,我发现我有很多这样的语句(超过 500 个)

bool isAEqualsB = (a == b) ? true : false;

这样重写有意义吗?

bool isAEqualsB = (a == b)

还是会在编译时优化?

提前致谢

桑蒂! =)

最佳答案

忽略性能 - 这所以不太可能成为瓶颈,在您证明它与适当的基准相关之前,您不应该考虑它。

不过,我绝对会关心可读性 - 从这个角度来看,我认为第二种方法要好得多,并且肯定会使用它。

编辑:在优化方面,C# 编译器似乎没有优化它:

  // First form
  IL_0000:  ldarg.0
  IL_0001:  ldarg.1
  IL_0002:  beq.s      IL_0007
  IL_0004:  ldc.i4.0
  IL_0005:  br.s       IL_0008
  IL_0007:  ldc.i4.1
  IL_0008:  stloc.0

  // Second form
  IL_0009:  ldarg.0
  IL_000a:  ldarg.1
  IL_000b:  ceq
  IL_000d:  stloc.1

但是,重要的当然不是 IL,而是 JIT 编译器所做的事情。现在,即使是 IL 大小的差异也可能意味着内联与非内联之间的差异......

关于c# - 这个简单的条件运算符会在编译时优化吗? (。网),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7986161/

相关文章:

c# - ItextSharp-如何为段落赋予颜色和粗体

c# - 当我在 Visual Studio 中创建项目引用时,我是否必须在部署时包含这些项目的 DLL?

javascript - 找出 4 个百分比之间的所有可能性

sql-server - 在 SQL Server 中有效地添加列

c# - WPF DataBinding 未使用 INotifyPropertyChanged 进行更新

java - 如何用Java代码重写或转换C#代码?

c# - 在 settings.settings 中添加自定义类型

c# - WCF 回调、代理和线程安全

c# - C# 中的 IIF 是什么?

PHP 设置 [pm.max_children、pm.start_servers、pm.min_spare_servers 和 pm.max_spare_servers]