Crearea rapidă a obiectelor în loc de Activator.CreateInstance (tip)

Î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.

31
задан Tiffany Townsend 5 July 2011 в 12:42
поделиться