哪个性能更好

时间:2014-06-04 09:43:12

标签: c# .net performance linq

以下哪项使用LINQ的性能更好?

sets.FirstOrDefault(x=>x.name=="xxx")

sets.FirstOrDefault(x=>!string.IsNullOrEmpty(x.name) && x.name.Equals("xxx",StringComparison.InvariantCultureIgnoreCase));

此处的名称可以是null。我在我的应用程序中使用此类查询20次以上。

有没有更好的方法?

3 个答案:

答案 0 :(得分:6)

这两个陈述之间存在重大差异,因此您只能在性能上判断它们。

第一个表现更好,但第二个表现不同(因为它不检查大/小写和变音符号)。

或者,您可以像这样重写第二个:

sets.FirstOrDefault(x => string.Equals(x.name, "xxx",StringComparison.OrdinalIgnoreCase));

它不需要string.IsNullOrEmpty,这将使第二次调用比它更快。

正如weston所述:使用OrdinalIgnoreCase的效果优于InvariantCultureIgnoreCase,因此效果优于this notice

答案 1 :(得分:0)

如果你只运行这个~20次,那不会太重要,但是第一个选项会更快,因为第二个选项会进行额外的空检查。

答案 2 :(得分:0)

我没有测试过,但我敢打赌sets.FirstOrDefault(x=>x.name=="xxx")更快。原因很简单 - 工作量少,工作量少,速度快。

虽然这种性能改进通常不值得。通过查看应用程序的体系结构,您将获得更多性能优势。