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. levenshtein alternative
- 3. app_offline 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. JavaScript if alternative
- 9. Android emulator alternative
- 10. Ruby alternative to Scrapy?
- 11. commons beanutils alternative
- 12. excel interop alternative
- 13. JIRA/confluence alternative
- 14. Google appengine datastore alternative?
- 15. shlex alternative for Java
- 16. PHP get_headers() alternative
- 17. ExpressionHelper.GetExpressionText (LambdaExpression) alternative
- 18. Python alternative to reduce()
- 19. Alternative to Flex Framework
- 20. CDI: @alternative vs @Qualifiers
- 21. CSS3 rotate alternative?
- 22. PHP get_called_class() alternative
- 23. php: array_replace_recursive alternative
- 24. svn "git add" alternative?
- 25. java web start alternative
- 26. window.innerHeight ie8 alternative
- 27. ¿Cómo uso Activator.CreateInstance con cadenas?
- 28. Diferencia entre Assembly.CreateInstance y Activator.CreateInstance?
- 29. predeterminado (T) versus Activator.CreateInstance (T)
- 30. IIS: .htaccess php_flag/php_value alternative?
Proporcioné una respuesta [aquí] (http://stackoverflow.com/a/16162809/661933) para la instancia predeterminada. – nawfal