IEnumerable状态机大于返回列表

时间:2016-05-28 10:42:33

标签: c# ienumerable

我不确定这会对现代计算机产生巨大影响。

然而,知道它很有趣。

我一直在阅读这些资源,试图找出使用迭代器状态机的重要性是否大于返回列表。重点不在于延迟加载的能力,在我的例子中,它在评估时没有任何可能性。

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状态机变得更小。

这些观察结果是否正确?

0 个答案:

没有答案