【问题标题】:IEnumerable garbage creationIEnumerable 垃圾创建
【发布时间】:2011-03-30 12:39:23
【问题描述】:

我在实现 IEnumerable 接口的对象池中有以下代码。

public IEnumerable<T> ActiveNodes
{
    get
    {
        for (int i = 0; i < _pool.Count; i++)
        {
            if (_pool[i].AvailableInPool)
            {
                yield return _pool[i];
            }
        }
    }
}

永远不会收集 _pool 中的任何元素,因为池的目的是保留对所有元素的引用以防止垃圾产生。

这段代码中的任何内容都会产生垃圾吗?

(也许 C# 创建了一个 IEnumerable 对象,稍后将被收集?)

【问题讨论】:

    标签: c# ienumerable


    【解决方案1】:

    此代码中的任何内容是否生成 垃圾?

    是的,yield return 创建一个临时的 IEnumerable&lt;T&gt;

    【讨论】:

      【解决方案2】:

      C# 生成需要收集的 IEnumerable 对象,并且该可枚举对象将创建一些也需要收集的枚举器对象。如果你想遵循 IEnumerable 模式,虽然很难避免。

      【讨论】:

        猜你喜欢
        • 2016-04-21
        • 1970-01-01
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 2019-06-24
        • 1970-01-01
        相关资源
        最近更新 更多