我在实现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应该迭代.订单无关紧要.