From dc4d522967b2637963b11ebd740a361dcfb21ddc Mon Sep 17 00:00:00 2001 From: RoosterDragon Date: Mon, 5 Jan 2015 19:05:25 +0000 Subject: [PATCH] Cache render related TraitsImplementing calls in Actor. The TraitsImplementing performs a dictionary lookup to match up its generic type parameter with the right trait collection. Since actors are rendered so much, it is useful to cache this result to avoid looking it up repeatedly. --- OpenRA.Game/Actor.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index 28e872c039..68033b0e96 100644 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -65,6 +65,9 @@ namespace OpenRA } } + readonly IEnumerable traitsImplementingRenderModifier; + readonly IEnumerable traitsImplementingRender; + internal Actor(World world, string name, TypeDictionary initDict) { var init = new ActorInitializer(this, initDict); @@ -104,6 +107,9 @@ namespace OpenRA return new Rectangle(offset.X, offset.Y, size.X, size.Y); }); + + traitsImplementingRenderModifier = TraitsImplementing(); + traitsImplementingRender = TraitsImplementing(); } public void Tick() @@ -119,14 +125,14 @@ namespace OpenRA public IEnumerable Render(WorldRenderer wr) { var renderables = Renderables(wr); - foreach (var modifier in TraitsImplementing()) + foreach (var modifier in traitsImplementingRenderModifier) renderables = modifier.ModifyRender(this, wr, renderables); return renderables; } IEnumerable Renderables(WorldRenderer wr) { - foreach (var render in TraitsImplementing()) + foreach (var render in traitsImplementingRender) foreach (var renderable in render.Render(this, wr)) yield return renderable; }