哪种语法有更好的性能?

时间:2013-07-02 10:30:17

标签: c# linq premature-optimization

这种语法中的哪一种在数据搜索方面具有更好的性能和速度?

第一种选择:

this.Message = pageContentsli
    .Where(m => m.PName == "Message")
    .First()
    .ContentValue;

第二种选择:

  foreach (PageContentsModel pc in pageContentsli)
  {
     if (pc.PName == "Message"){
        this.Message = pc.ContentValue;
        break;
      }
  }

2 个答案:

答案 0 :(得分:2)

在继续进行比较之前,您应该将条件移到First内,如下所示:

this.Message = pageContentsli.First(m => m.PName == "Message").ContentValue;

就性能而言,你应该看到没有区别。但是,在可读性方面,修改后的LINQ版本获胜。

答案 1 :(得分:0)

首先让我解释两种语法实际上是做什么的。

第一个语法(where)中,它逐个处理元素,如果它捕获m.PName="Message",则会将请求的值返回到this.Message然后处理停止。

第二语法(foreach)中,它逐个处理元素,当它捕获m.PName="Message"时,它会将值分配给this.Message和再次开始处理元素的其余部分。

因此,尽管找到了值,但第二语法不会停止,因此完成的时间比第一个语法要多。