哪个性能更好
本文关键字:更好 性能 | 更新日期: 2023-09-27 18:06:31
下面哪个使用LINQ性能更好?
sets.FirstOrDefault(x=>x.name=="xxx")
或
sets.FirstOrDefault(x=>!string.IsNullOrEmpty(x.name) && x.name.Equals("xxx",StringComparison.InvariantCultureIgnoreCase));
这里的名称可以是null
。我在我的应用程序中使用这种查询20+次。
有更好的方法吗?
这两个语句有很大的不同,所以您不能只根据性能来判断它们。
第一个执行得更好,但是第二个将给出不同的结果(因为它不检查大小写和变音符号)。
可选地,你可以重写第二个像这样:
sets.FirstOrDefault(x => string.Equals(x.name, "xxx",StringComparison.OrdinalIgnoreCase));
它不需要string.IsNullOrEmpty
,这将使第二次调用比以前快一点。
正如weston所指出的那样:使用OrdinalIgnoreCase
比InvariantCultureIgnoreCase
性能更好,因此Microsoft发出了此通知。
如果你只运行这个~20次,它不会有太大的影响,但是第一个选项会更快,因为第二个选项会做一个额外的null检查。
我还没有测试过,但我敢打赌sets.FirstOrDefault(x=>x.name=="xxx")
更快。原因很简单——它做的工作更少,而且更少的工作更快。
虽然,这种类型的性能改进通常是不值得的。通过查看应用程序的架构,您将获得更多的性能优势。