Estoy usando RedGate para hacer una evaluación del rendimiento. Noto que crear dinámicamente una instancia usando Activator.CreateInstance
(con dos parámetros de constructor) está tomando una cantidad decente de tiempo ... ¿hay alguna alternativa mejor que todavía utilice un enfoque reflexivo (no una creación de instancias explícita)?Activator.CreateInstance Performance Alternative
Respuesta
Utilice un lambda compilado si es posible, es mucho más rápido.
+1. Si eso aún no es lo suficientemente rápido, entonces puede intentar emitir reflejo, pero es poco probable que produzca una gran mejora con respecto a un lambda compilado, y es mucho más complicado de codificar. –
¿La operación de compilación() es más lenta o más lenta? ¿Asumo que el rendimiento se tiene en cuenta sin incluir el tiempo de compilación? En escenarios donde son necesarias múltiples instancias de diferentes tipos y donde se determina el tipo de objeto en tiempo de ejecución, ¿Sería mucho más lento tener una operación de compilación cada vez que Activator.CreateInstance? –
Ese vínculo es ahora un 404 –
No se olvide de DynamicMethod
Aquí es ejemplo de cómo crear nueva instancia a través constructor por defecto
public static ObjectActivator CreateCtor(Type type)
{
if (type == null)
{
throw new NullReferenceException("type");
}
ConstructorInfo emptyConstructor = type.GetConstructor(Type.EmptyTypes);
var dynamicMethod = new DynamicMethod("CreateInstance", type, Type.EmptyTypes, true);
ILGenerator ilGenerator = dynamicMethod.GetILGenerator();
ilGenerator.Emit(OpCodes.Nop);
ilGenerator.Emit(OpCodes.Newobj, emptyConstructor);
ilGenerator.Emit(OpCodes.Ret);
return (ObjectActivator)dynamicMethod.CreateDelegate(typeof(ObjectActivator));
}
public delegate object ObjectActivator();
aquí es más sobre performance comparison
medición InvokeMember .. .1000000 iteraciones en 1.5643784 segundos.
medición MethodInfo.Invoke ... 1000000 iteraciones en 0.8150111 segundos.
medición DynamicMethod ... 1000000 iteraciones en 0.0330202 segundos.
medición llamada directa ... 1000000 iteraciones en 0.0136752 segundos.
comparación de rendimiento [http://www.wintellect.com/blogs/krome/getting-to-know-dynamicmethod] muestra 404 ahora. – Lcng
- 1. Activator.CreateInstance falla
- 2. app_offline alternative
- 3. levenshtein alternative
- 4. Activator.CreateInstance (cadena) y Activator.CreateInstance <T>() diferencia
- 5. CALayer performance vs. UIImageView performance
- 6. Ninject, proveedores y Activator.CreateInstance
- 7. Activator.CreateInstance con parámetros opcionales
- 8. svn "git add" alternative?
- 9. shlex alternative for Java
- 10. Python alternative to reduce()
- 11. CDI: @alternative vs @Qualifiers
- 12. PHP get_called_class() alternative
- 13. window.innerHeight ie8 alternative
- 14. ExpressionHelper.GetExpressionText (LambdaExpression) alternative
- 15. php: array_replace_recursive alternative
- 16. commons beanutils alternative
- 17. Google appengine datastore alternative?
- 18. PHP get_headers() alternative
- 19. Android emulator alternative
- 20. excel interop alternative
- 21. Ruby alternative to Scrapy?
- 22. CSS3 rotate alternative?
- 23. JIRA/confluence alternative
- 24. JavaScript if alternative
- 25. java web start alternative
- 26. Alternative to Flex Framework
- 27. ¿Cómo uso Activator.CreateInstance con cadenas?
- 28. predeterminado (T) versus Activator.CreateInstance (T)
- 29. Diferencia entre Assembly.CreateInstance y Activator.CreateInstance?
- 30. Open source Enthought Python alternative
Proporcioné una respuesta [aquí] (http://stackoverflow.com/a/16162809/661933) para la instancia predeterminada. – nawfal