Avoid constructing a delegate on every TraitDict query -- saving 250M/min
This commit is contained in:
@@ -17,17 +17,19 @@ namespace OpenRA
|
||||
{
|
||||
class TraitDictionary
|
||||
{
|
||||
Dictionary<Type, ITraitContainer> traits = new Dictionary<Type, ITraitContainer>();
|
||||
|
||||
Dictionary<Type, ITraitContainer> traits = new Dictionary<Type, ITraitContainer>();
|
||||
|
||||
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 )
|
||||
|
||||
Reference in New Issue
Block a user