首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与返回列表相比,收益返回的并发性或性能优势

与返回列表相比,收益返回的并发性或性能优势
EN

Stack Overflow用户
提问于 2008-11-16 16:25:06
回答 1查看 7K关注 0票数 19

我想知道是否有任何并发性(现在或未来),或使用收益返回而不是返回列表的性能优势。请参阅以下示例

处理方法

代码语言:javascript
复制
void Page_Load()
{
  foreach(var item in GetPostedItems())
    Process(item);
}

使用yield

代码语言:javascript
复制
IEnumerable<string> GetPostedItems()
{
  yield return Item1.Text;
  yield return Item2.Text;
  yield return Item3.Text; 
}

返回列表

代码语言:javascript
复制
IEnumerable<string> GetPostedItems()
{
  var list = new List<string>();
  list.Add(Item1.Text);
  list.Add(Item2.Text);
  list.Add(Item3.Text);
  return list;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-11-16 16:44:34

yield return示例中,每次调用IEnumerable.MoveNext时都会计算结果,而在list示例中,在返回IEnumerable之前会计算所有结果(请注意,可能不会为每个结果计算Text属性,因为可能会发生缓存和内联)。因此,对于yield return,您应该在第一次调用枚举器时获得较小的性能增强,然后在对属性进行计算时,在随后的每次调用IEnumerable.MoveNext时可能会有较小的性能下降。

关于yield return的一件伟大的事情是,您可以返回无限序列、随机序列和其他各种新奇的枚举,这些枚举要么效率极低,要么无法使用首先创建列表的模型来完成。

简单地说,返回List的实例要求在返回IEnumerable之前计算列表中的所有元素,而使用yield return允许按照IEnumerable的使用者所需计算每个元素。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/294061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档