以下哪项使用LINQ的性能更好?
sets.FirstOrDefault(x=>x.name=="xxx")
或
sets.FirstOrDefault(x=>!string.IsNullOrEmpty(x.name) && x.name.Equals("xxx",StringComparison.InvariantCultureIgnoreCase));
此处的名称可以是null
。我在我的应用程序中使用此类查询20次以上。
有没有更好的方法?
答案 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")
更快。原因很简单 - 工作量少,工作量少,速度快。
虽然这种性能改进通常不值得。通过查看应用程序的体系结构,您将获得更多性能优势。