KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm developing an Xbox 360 game with XNA. I'd really like to use C#'s yield return construct in a couple of places, but it seems to create a lot of garbage. Have a look at this code: class ComponentPool<T> where T : DrawableGameComponent { List<T> preallocatedComponents; public IEnumerable<T> Components { get { foreach (T component in this.preallocatedComponents) { // Enabled often changes during iteration over Components // for example, it's not uncommon for bullet components to get // disabled during collision testing // sorry I didn't make that clear originally if (component.Enabled) { yield return component; } } } } ... I use these component pools everywhere - for bullets, enemies, explosions; anything numerous and transient. I often need to loop over their contents, and I'm only ever interested in components that are active (i.e., Enabled == true ), hence the behavior of the Components property. Currently, I'm seeing as much as ~800K per second of additional garbage when using this technique. Is this avoidable? Is there another way to use yield return ? Edit: I found this question about the broader issue of how to iterate over a resource pool without creating garbage. A lot of commenters were dismissive, apparently not understanding the limitations of the Compact Framework, but this commenter was more sympathetic and suggested creating an iterator pool.
Tags (comma-separated)
Save Edits
Cancel