相关疑难解决方法(0)

允许迭代而不产生任何垃圾

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

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

据我所知(根据这个问题),这将产生垃圾,因为需要收集IEnumerable对象._pool中的所有元素都不会被收集,因为池的目的是保持对所有元素的引用以防止垃圾创建.

任何人都可以建议一种允许迭代_pool以便不生成垃圾的方法吗?

在池上迭代时,池中的所有项都AvailableInPool == true应该迭代.订单无关紧要.

c# iteration garbage-collection compact-framework

25
推荐指数
3
解决办法
7699
查看次数