List<T>.AddRange is causing a brief Update/Draw delay

Posted by Justin Skiles on Game Development See other posts from Game Development or by Justin Skiles
Published on 2012-09-12T15:48:47Z Indexed on 2012/09/12 15:52 UTC
Read the original article Hit count: 198

Filed under:
|
|
|

I have a list of entities which implement an ICollidable interface. This interface is used to resolve collisions between entities. My entities are thus:

  • Players
  • Enemies
  • Projectiles
  • Items
  • Tiles

On each game update (about 60 t/s), I am clearing the list and adding the current entities based on the game state. I am accomplishing this via:

collidableEntities.Clear();
collidableEntities.AddRange(players);
collidableEntities.AddRange(enemies);
collidableEntities.AddRange(projectiles);
collidableEntities.AddRange(items);
collidableEntities.AddRange(camera.VisibleTiles);

Everything works fine until I add the visible tiles to the list. The first ~1-2 seconds of running the game loop causes a visible hiccup that delays drawing (so I can see a jitter in the rendering). I can literally remove/add the line that adds the tiles and see the jitter occur and not occur, so I have narrowed it down to that line.

My question is, why? The list of VisibleTiles is about 450-500 tiles, so it's really not that much data. Each tile contains a Texture2D (image) and a Vector2 (position) to determine what is rendered and where. I'm going to keep looking, but from the top of my head, I can't understand why only the first 1-2 seconds hiccups but is then smooth from there on out.

Any advice is appreciated.

© Game Development or respective owner

Related posts about XNA

Related posts about c#