Я пытаюсь улучшить производительность нашего приложения. У нас много вызовов 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>));
}
Мне интересно, почему это так, все, что я делаю, это:
ITabDocument document = CreateInstance<ITabDocument>(Type.GetType("[Company].Something"));
Есть ли лучший способ создания объектов, которые помогут в этом? Это немного сложно, когда вы не уверены в конкретном типе.