我想知道是否有任何并发性(现在或未来),或使用收益返回而不是返回列表的性能优势。请参阅以下示例
处理方法
void Page_Load()
{
foreach(var item in GetPostedItems())
Process(item);
}
使用yield
IEnumerable<string> GetPostedItems()
{
yield return Item1.Text;
yield return Item2.Text;
yield return Item3.Text;
}
返回列表
IEnumerable<string> GetPostedItems()
{
var list = new List<string>();
list.Add(Item1.Text);
list.Add(Item2.Text);
list.Add(Item3.Text);
return list;
}
发布于 2008-11-16 16:44:34
在yield return
示例中,每次调用IEnumerable.MoveNext
时都会计算结果,而在list示例中,在返回IEnumerable
之前会计算所有结果(请注意,可能不会为每个结果计算Text
属性,因为可能会发生缓存和内联)。因此,对于yield return
,您应该在第一次调用枚举器时获得较小的性能增强,然后在对属性进行计算时,在随后的每次调用IEnumerable.MoveNext
时可能会有较小的性能下降。
关于yield return
的一件伟大的事情是,您可以返回无限序列、随机序列和其他各种新奇的枚举,这些枚举要么效率极低,要么无法使用首先创建列表的模型来完成。
简单地说,返回List
的实例要求在返回IEnumerable
之前计算列表中的所有元素,而使用yield return
允许按照IEnumerable
的使用者所需计算每个元素。
https://stackoverflow.com/questions/294061
复制相似问题