编译和执行禅哪个更好?if(a == null)还是a?

  • 本文关键字:执行 null 还是 if 更好 编译 c#
  • 更新时间 :
  • 英文 :


让我们有一个具有以下签名的方法:

A[] Translate(IEnumerable<B> bees)

我想知道以下片段之一是否会以任何实际的方式导致更好的执行。

if (bees == null || !bees.Any()) // Let's be super expressive
{ 
return null;
}
var translated = bees.Select(b => (...)).ToArray();
return translated; // Intermediate var so that I can debug easier

与。

if (bees == null) // Let's be very expressive
{ 
return null;
}
var translated = bees.Select(b => (...)).ToArray();
return translated; // Intermediate var so that I can debug easier

与。

return bees?.Select(b => (...)).ToArray();

更新 16/09:我使if返回 null,而不是一个新数组(这对我的问题精神来说并不重要(

假设Any()速度很快,第一个应该比第二个稍微便宜一些,因为当bees为空时,堆分配会更少(特别是 Select 枚举器和 lambda 表达式(。第三种选择相当于第二种选择。

但是,如果bees是像数据库查询这样具有较大启动成本的东西,那么调用Any()实际上可能很慢,并且避免Select(...).ToArray()空查询所带来的收益可能会被同时调用Any()Select(...).ToArray()对非空查询造成的损失所抵消。

我建议以最易读的方式编写此内容,除非您有令人信服的理由进行此性能优化,并且备份的数据表明它实际上提高了用例的性能。

最新更新