J'utilise RedGate pour évaluer les performances. Je remarque que la création dynamique d'une instance en utilisant Activator.CreateInstance
(avec deux paramètres constructeurs) prend un temps décent ... existe-t-il une meilleure alternative qui utilise encore une approche réflexive (instanciation non explicite)?Activator.CreateInstance Performance Alternative
Répondre
Utilisez un lambda compilé si vous le pouvez, c'est BEAUCOUP plus rapide.
+1. Si ce n'est pas encore assez rapide, alors vous pouvez essayer d'émettre de la réflexion, mais il est peu probable que cela donne beaucoup d'amélioration sur un lambda compilé, et c'est beaucoup plus compliqué à coder. –
L'opération Compile() est-elle plus lente ou plus rapide? Je suppose que la performance est comptabilisée sans inclure le temps de compilation? Dans les scénarios où plusieurs instances de types différents sont nécessaires et où le type d'objet est déterminé à l'exécution, Serait-il beaucoup plus lent d'avoir une opération de compilation à chaque fois que Activator.CreateInstance? –
Ce lien est maintenant un 404 –
Ne pas oublier DynamicMethod
Voici par exemple comment créer une nouvelle instance à travers constructeur par défaut
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();
est ici plus sur performance comparison
mesure InvokeMember .. . 1000000 itérations dans 1.5643784 secondes.
Méthode de mesureInfo.Invoquer ... 1000000 itérations en 0.8150111 secondes.
Mesure de DynamicMethod ... 1000000 itérations en 0.0330202 secondes.
Mesure d'appel direct ... 1000000 itérations en 0.0136752 secondes.
comparaison des performances [http://www.wintellect.com/blogs/krome/getting-to-know-dynamicmethod] montre 404 maintenant. – Lcng
- 1. Activator.CreateInstance timeout
- 2. Activator.CreateInstance (chaîne) et Activator.CreateInstance <T>() différence
- 3. Qu'est-ce que Activator.CreateInstance?
- 4. Activator.CreateInstance mon instance?
- 5. C# Activator.CreateInstance MissingMethod exception
- 6. Ninject, Providers et Activator.CreateInstance
- 7. Alternative à stdext :: hash_map pour des raisons de performance
- 8. Activator.CreateInstance échoue dans Windows Services
- 9. Activator.CreateInstance: Instanciation dynamique des classes
- 10. var mot-clé avec Activator.CreateInstance?
- 11. Activator.CreateInstance est-il disponible dans DotNet 3.5?
- 12. Activator.CreateInstance démarrer l'application pour un chemin différent
- 13. Quelle fonction de surcharge Activator.CreateInstance appelle?
- 14. Activator.CreateInstance - Expliquez-donc je peux comprendre
- 15. Comment faire Activator.CreateInstance pour différents constructeurs?
- 16. Alternative pour SIFR
- 17. PHPUnit - alternative au sélénium?
- 18. JSF - Alternative à "rendered ="?
- 19. Alternative à NOT EXISTS
- 20. Oracle AUTOTRACE alternative
- 21. Puis-je remplacer l'appel à Activator.CreateInstance() dans NHibernate?
- 22. Différence entre Activator.CreateInstance() et typeof (T) .InvokeMember() avec BindingFlags.CreateInstance
- 23. Comment transmettre les paramètres à Activator.CreateInstance <T>()
- 24. Alternative pour sizeWithFont: méthode
- 25. PDFTK Alternative
- 26. ColdFusion.navigate alternative?
- 27. Formview alternative?
- 28. mkfifo Alternative
- 29. parseInt alternative
- 30. MSBuildShellExtension alternative?
J'ai fourni une réponse [ici] (http://stackoverflow.com/a/16162809/661933) pour l'instance par défaut. – nawfal