ben*_*wey 19 c# yield enumerators
我想知道使用yield return而不是返回列表是否存在任何并发(现在或将来)或性能优势.请参阅以下示例
处理方法
void Page_Load()
{
foreach(var item in GetPostedItems())
Process(item);
}
Run Code Online (Sandbox Code Playgroud)
使用收益率回报
IEnumerable<string> GetPostedItems()
{
yield return Item1.Text;
yield return Item2.Text;
yield return Item3.Text;
}
Run Code Online (Sandbox Code Playgroud)
返回一个清单
IEnumerable<string> GetPostedItems()
{
var list = new List<string>();
list.Add(Item1.Text);
list.Add(Item2.Text);
list.Add(Item3.Text);
return list;
}
Run Code Online (Sandbox Code Playgroud)
Jef*_*tes 40
在该yield return示例中,在每次调用时评估结果,IEnumerable.MoveNext而在列表示例中,在IEnumerable返回之前评估所有结果(请注意,Text可能不会为每个结果评估属性,因为可以进行缓存和内联).因此,yield return您应该在第一次调用枚举器时获得较小的性能增强,然后在IEnumerable.MoveNext评估属性时对每次后续调用可能会略微降低性能.
其中一个重要的事情yield return是,您可以返回无限序列,随机序列和各种其他新颖的枚举,这些枚举要么是效率极低,要么无法使用先创建列表的模型.
简单地说,返回一个实例List需要在返回之前评估列表中的所有元素IEnumerable,而using yield return允许按照消费者的需要计算每个元素IEnumerable.
| 归档时间: |
|
| 查看次数: |
6786 次 |
| 最近记录: |