Używam RedGate do przeprowadzenia oceny wydajności. Zauważam, dynamiczne tworzenie instancji przy użyciu Activator.CreateInstance
(z dwoma parametrami konstruktora) zajmuje przyzwoitą ilość czasu ... czy istnieje lepsza alternatywa, która nadal wykorzystuje podejście refleksyjne (nie jawne tworzenie instancji)?Activator.CreateInstance Performance Alternative
Odpowiedz
Użyj skompilowanej lambdy, jeśli możesz, jej DUŻO szybciej.
+1. Jeśli to nadal nie jest wystarczająco szybkie, możesz spróbować emitować odbicie, ale jest mało prawdopodobne, że przyniesie znacznie lepsze efekty niż skompilowana lambda, a to jest dużo bardziej skomplikowane dla kodu. –
Czy operacja kompilacji() działa wolniej lub szybciej? Zakładam, że wydajność jest rozliczana bez uwzględnienia czasu kompilacji? W scenariuszach, w których wiele instancji różnych typów jest koniecznych i gdzie typ obiektu jest określany w czasie wykonywania, czy byłoby go dużo wolniej podczas operacji kompilacji za każdym razem niż Activator.CreateInstance? –
Ten link jest teraz 404 –
Nie zapomnij o DynamicMethod
Oto przykład, jak utworzyć nową instancję thru domyślnego konstruktora
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();
tutaj bardziej o performance comparison
InvokeMember pomiarowe .. 1000000 iteracji w 1,5643784 sekundy.
Metoda pomiarowaInfo.Invoke ... 1000000 iteracji w 0,8150111 sekund.
Pomiar DynamicMethod ... 1000000 iteracji w 0,0330202 sekund.
Pomiar połączenia bezpośredniego ... 1000000 iteracji w 0,0136752 sekundy.
Porównanie wydajności [http://www.wintellect.com/blogs/krome/getting-to-know-dynamicmethod] pokazuje teraz 404. – Lcng
- 1. CALayer performance vs. UIImageView performance
- 2. Activator.CreateInstance z opcjonalnymi parametrami
- 3. Alternatywny Photo Alternative Three20?
- 4. JSpinner ActionListener alternative
- 5. Ideatorrent open source alternative
- 6. shlex alternative dla Java
- 7. NLog performance
- 8. Multimethods performance
- 9. Datediff performance
- 10. IronPython performance
- 11. OracleBulkCopy Performance
- 12. Dictionary.Count performance
- 13. Django + Apache + Windows WSGIDaemonProcess Alternative
- 14. Sequel Pro Alternative dla Windows
- 15. funkcje z 'Alternative' klasy typu
- 16. Alternative IndexProvider dla Neo4J 1.9.1
- 17. Performance boost Python
- 18. Akka.net vs Orleans performance
- 19. performance stringbuf vs string
- 20. Filtry Java Performance Question
- 21. In-memory LINQ performance
- 22. Django Performance/Memory usage
- 23. Oracle: Bulk Collect performance
- 24. JavaScript void performance
- 25. Dependency Injection Startup Performance
- 26. JavaScript Performance Evaluation
- 27. Vector vs Array Performance
- 28. Android ContentProvider Performance
- 29. DataContractSerializer vs BinaryFormatter performance
- 30. Apache POI Performance
Podałem odpowiedź [tutaj] (http://stackoverflow.com/a/16162809/661933) dla domyślnej instancji. – nawfal