我不确定这会对现代计算机产生巨大影响。
然而,知道它很有趣。
我一直在阅读这些资源,试图找出使用迭代器状态机的重要性是否大于返回列表。重点不在于延迟加载的能力,在我的例子中,它在评估时没有任何可能性。
Resoures:
现在最后一个资源可能是最接近的。
如果您知道列表的长度是常数,则归结为:
IEnumerable<T>
状态机>
List<T>
所以:
public void IEnumerable<CustomClass> GetCustoms(string input)
{
foreach (var ch in input.ToCharArray())
yield return new CustomClass(ch);
}
状态机是否会产生比以下更大的开销:
public void IEnumerable<CustomClass> GetCustoms(string input)
{
var result = new List<CustomClass>(input.Length);
foreach(var ch in input.ToCharArray())
result.Add(new CustomClass(ch));
return result;
}
显然这是一个人为的例子。但它说明了这一点。
我可以想象,如果在方法迭代之前发生了很多预处理,那么状态机将包含所有预处理开销。
逻辑会说List
内存的分配远小于分配IEnumerable
状态机内存。
显然,枚举越大,它开始翻转越多,IEnumerable
状态机变得更小。
这些观察结果是否正确?