Avoid constructing a delegate on every TraitDict query -- saving 250M/min

This commit is contained in:
Chris Forbes
2011-03-05 21:53:23 +13:00
parent ea022a0e06
commit 0480f1e984

View File

@@ -21,13 +21,15 @@ namespace OpenRA
ITraitContainer InnerGet( Type t )
{
return traits.GetOrAdd( t, CreateTraitContainer );
return traits.GetOrAdd( t, doCreateTraitContainer );
}
// construct this delegate once.
static Func<Type, ITraitContainer> doCreateTraitContainer = CreateTraitContainer;
static ITraitContainer CreateTraitContainer( Type t )
{
return (ITraitContainer)typeof( TraitContainer<> ).MakeGenericType( t )
.GetConstructor( new Type[ 0 ] ).Invoke( new object[ 0 ] );
.GetConstructor( Type.EmptyTypes ).Invoke( null );
}
public void AddTrait( Actor actor, object val )