Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这其中哪一个合成单元的性能更好?_C#_Linq_Premature Optimization - Fatal编程技术网

C# 这其中哪一个合成单元的性能更好?

C# 这其中哪一个合成单元的性能更好?,c#,linq,premature-optimization,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.

以下哪种语法在数据之间搜索时具有更好的性能和速度

第一种选择:

this.Message = pageContentsli
    .Where(m => m.PName == "Message")
    .First()
    .ContentValue;
  foreach (PageContentsModel pc in pageContentsli)
  {
     if (pc.PName == "Message"){
        this.Message = pc.ContentValue;
        break;
      }
  }
第二种选择:

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

在继续比较之前,应先将条件移动到
内部,如下所示:

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

就性能而言,你应该看不出有什么不同。然而,在可读性方面,修改后的LINQ版本轻而易举地获胜。

首先让我解释一下这两种语法的实际作用

first语法(
其中
)中,它逐个处理元素,如果捕捉到
m.PName=“Message”
,它将请求的值返回给
此.Message
,然后处理停止

第二个语法(
foreach
)中,它逐个处理元素,当捕捉到
m.PName=“Message”
时,它将值分配给
此.Message
,然后再次开始处理元素的其余部分


因此,即使找到了值,第二个语法不会停止,因此它比第一个语法需要更多的时间来完成。

您是否有实际的性能问题?如果您有两匹马,您想知道这两匹马中哪一匹比您的马跑得快。在找到第一匹后,它们都会不必要地继续。foreach例如,当您通过实体框架访问数据源时,速度会慢得多,因为它会遍历所有项。LINQtoEntities将编写一个漂亮的WHERE查询。在这种情况下,答案总是:视情况而定,自己进行基准测试。-@Vogel612来源?例如,请参阅。@CodeCaster的讲话方向更为复杂。即使您是正确的,在简单循环中中断是可以接受的,并且更容易理解,但我要说的是,在不面对复杂(嵌套)循环中的使用问题时,很容易将“可接受”误认为“良好”。因此,我更喜欢称之为“坏习惯”或“最后手段”,因为代码可读性对OP有利。。。但是现在我的编辑时间用完了,我无法解决这个问题。…@motevallizadeh没问题-我编辑了答案,删除了不相关的部分。他说:“就性能而言,你应该看不到任何区别。”