c# - 使用 LINQ "everywhere"时的性能问题?

标签 c# .net linq performance resharper

升级到 ReSharper5 后,它为我提供了更多关于代码改进的有用提示。我现在随处可见的一个技巧是用 LINQ 查询替换 foreach 语句。举个例子:

private Ninja FindNinjaById(int ninjaId)
{
    foreach (var ninja in Ninjas)
    {
        if (ninja.Id == ninjaId)
            return ninja;
    }
    return null;
}

建议使用 LINQ 将其替换为以下内容:

private Ninja FindNinjaById(int ninjaId)
{
    return Ninjas.FirstOrDefault(ninja => ninja.Id == ninjaId);
}

这看起来一切都很好,而且我相信用 foreach 替换这个在性能方面没有问题。但这是我应该做的事情吗?或者我可能会遇到所有这些 LINQ 查询无处不在的性能问题?

最佳答案

您需要了解 LINQ 查询将“在幕后”执行的操作,并将其与运行您的代码进行比较,然后您才能知道是否应该更改它。一般来说,我并不是说您需要知道将生成的确切代码,但您确实需要知道它将如何执行该操作的基本概念。在您的示例中,我推测 LINQ 基本上会与您的代码大致相同,并且因为 LINQ 语句更紧凑和更具描述性,所以我更喜欢它。但是,有时 LINQ 可能不是理想的选择,尽管可能不多。一般来说,我认为几乎任何循环结构都可以用等效的 LINQ 结构替换。

关于c# - 使用 LINQ "everywhere"时的性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2674593/

相关文章:

c# - 确保 lambda 表达式指向类的实际属性?

C# 在 PictureBox 中的某个点上绘制位图

c# - 将桌面 C# 应用程序连接到在线 MySQL 数据库

c# - 当另一个完成使用多线程时启动一个方法

c# - 隐藏或删除微调器 Xamarin.Android

c# - 过滤对象数组以删除不具有属性最大值的对象

c# - 为我的项目对象在 Google 存储签名 URL 上启用 CORS

c# - 如何使用 XAML 在默认浏览器中打开 URL(windows-8 应用程序)

.net - 升级方法为 TransactionScope 和 ODP.net 的分布式事务返回了无效值

c# - 使用 LINQ 仅返回包含多个 DataTable 的 DataSet 中的两个特定 DataTable