我正在努力提高应用程序的性能.我们有很多Activator.CreateInstance调用引起了一些悲伤.
我们基于一个接口(ITabDocument)实例化了很多类,在浏览后我想到了使用这段代码:
代码并不比使用我们拥有的Activator.CreateInstance代码更好(实际上稍慢).
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>));
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会这样,我所做的只是:
ITabDocument document = CreateInstance<ITabDocument>(Type.GetType("[Company].Something"));
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来创建有助于上述内容的对象?当你不确定具体的类型时,它有点难.
如果我有一个类型参数约束new()
:
void Foo<T>() where T : new()
{
var t = new T();
}
Run Code Online (Sandbox Code Playgroud)
在new T()
内部使用该Activator.CreateInstance
方法(即反射)是真的吗?