哪个性能更好

本文关键字:更好 性能 | 更新日期: 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所指出的那样:使用OrdinalIgnoreCaseInvariantCultureIgnoreCase性能更好,因此Microsoft发出了此通知。

如果你只运行这个~20次,它不会有太大的影响,但是第一个选项会更快,因为第二个选项会做一个额外的null检查。

我还没有测试过,但我敢打赌sets.FirstOrDefault(x=>x.name=="xxx")更快。原因很简单——它做的工作更少,而且更少的工作更快。

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