public void Execute() { if (collector.GetCount() != 0) { var collectedEntities = collector.GetCollectedEntities(); for (int i = (collectedEntities.Count - 1); i >= 0; --i) { if (Filter(collectedEntities[i])) { entities.Add(collectedEntities[i]); collectedEntities[i].Retain(); } } collector.ClearCollectedEntities(); if (entities.Count != 0) { try { Execute(entities); } finally { for (int i = (entities.Count - 1); i >= 0; --i) { entities[i].Release(); } entities.Clear(); } } } }