Încerc să îmbunătățesc performanța aplicației noastre. Avem o mulțime de apeluri Activator.CreateInstance care provoacă o anumită durere.
Instanțiem un multe clase bazate pe o interfață (ITabDocument) și după ce m-am uitat în jur m-am gândit să folosesc acest cod:
Codul nu este mai bun (de fapt marginal mai lent) decât utilizarea codului Activator.CreateInstance pe care l-am avut.
public static Func<T> CreateInstance<T>(Type objType) where T : class, new()
{
var dynMethod = new DynamicMethod("DM$OBJ_FACTORY_" + objType.Name, objType, null, objType);
ILGenerator ilGen = dynMethod.GetILGenerator();
ilGen.Emit(OpCodes.Newobj, objType.GetConstructor(Type.EmptyTypes));
ilGen.Emit(OpCodes.Ret);
return (Func<T>)dynMethod.CreateDelegate(typeof(Func<T>));
}
Sunt Mă întreb de ce este asta, tot ce fac este:
ITabDocument document = CreateInstance<ITabDocument>(Type.GetType("[Company].Something"));
Există o modalitate mai bună de a crea obiecte care să ajute cu cele de mai sus? Este puțin greu atunci când nu sunteți sigur de tipul de beton.