У меня есть следующий код в пуле объектов, который реализует интерфейс IEnumerable.
public IEnumerable<T> ActiveNodes
{
get
{
for (int i = 0; i < _pool.Count; i++)
{
if (_pool[i].AvailableInPool)
{
yield return _pool[i];
}
}
}
}
Насколько я знаю (в соответствии с этим вопросом), это сгенерирует мусор, поскольку объект IEnumerable нужно будет собрать. Ни один из элементов в _pool никогда не будет собран, так как цель пула - сохранить ссылки на все их, чтобы предотвратить создание мусора.
Может ли кто-нибудь предложить способ разрешить итерацию через _pool, чтобы мусор не генерировался?
При повторении пула все элементы в пуле, которые имеют AvailableInPool == true
, должны быть переименованы. Заказ не имеет значения.