Czy istnieje różnica w wydajności między tworzeniem metody emisji IL bezpośrednio, w przeciwieństwie do budowania drzewa wyrażeń?Co jest szybsze: drzewa wyrażeń lub ręczne emitowanie IL
Odpowiedz
Ostatecznie API drzewa ekspresji jest po prostu bardziej znanym interfejsem API niż relection.emit, a zatem są one efektywnie równoważne, chociaż uważam, że istnieje wiele rzeczy, których nie można zrobić w drzewach ekspresji, które można uzyskać poprzez bezpośrednie odbicie. emitować.
Reflection.Emit jest najszybszym ogólnym, ale w taki sam sposób, w jaki pętla for jest szybsza niż foreach ogólnie. Istnieje wiele scenariuszy, w których można napisać kod, który działa szybciej przy użyciu pliku reflection.emit niż przy użyciu api wyrażenia, ale w większości przypadków powinny one być równoważne.
Teraz API wyrażeń może być nieco lepszym sposobem robienia rzeczy z kilku powodów.
- Składa się w prostszy sposób niż za pomocą bezpośredniego reflection.emit. Możesz pobrać drzewo wyrażenia i ponownie je zapisać, aby dodać trochę logiki w sposób znacznie łatwiejszy niż w przypadku użycia bezpośredniego IL-any. W przyszłości mogą zostać dodane optymalizacje, których możesz nie rozumieć, które nie wystąpiłyby podczas korzystania z odbicia w kierunku. .emitować.
Ostatecznie powiedziałbym, że to pranie. Jeśli jest to naprawdę krytyczne i dobrze znasz reflection.emit, zazwyczaj możesz użyć skrótów w IL, że nie skorzystasz z API ekspresji, ale poza tym, w ogólnym użyciu, powinny one być dość ekwiwalentne.
Doskonały. To jest sedno tego, o co prosiłem, dziękuję. – sircodesalot
Nie ma problemu, powodzenia w podróży do światów reflect.emit i/lub api. –
Doskonałe i złożone pytanie. Do niedawna Expression po prostu nie był w stanie obsłużyć wszystkich scenariuszy - więc w wielu przypadkach nie było to pytanie. Zmienia się to wraz z wprowadzeniem Expression.Block itp. W większości "zwykłych" przypadków użycie wyrażenia jest prawdopodobnie więcej niż wystarczające, ale przyznaję, że nie mam dokładnych pomiarów, po prostu dlatego, że podczas gdy robię dużo IL, to również celuj w ramy niższego poziomu, które nie mają luksusów, takich jak Expression (a na pewno nie Expression.Block). Mam również tendencję do stosowania złożonych podejść "dekoratorów", które nadają się ładnie do układania gimnastyki w IL, ale niekoniecznie do ekspresji (w rzeczy samej, jeśli twój IL jest na tyle nietypowy, że reflektor i walka z nim, to prawdopodobnie również nie mapuje czysto do wyrażenia - a moja IL jest raczej gnarly).
Niestety, nie mogę dać ci więcej danych numerycznych - Główne punkty:
- jeśli wymagania ramowe w dół poziomu kwestia jest dyskusyjna
- inaczej, trzeba by profil
- 1. C# Metoda dynamiczna - IL vs drzewa wyrażeń
- 2. Co jest szybsze? File_exist lub zapytanie MySQL?
- 3. Co jest szybsze: JDBC lub JNDI?
- 4. Co jest szybsze DOM Insertion lub Manipulation?
- 5. co jest szybsze: odtworzyć lub wyczyścić()?
- 6. pisać lub drukować, co jest szybsze?
- 7. Co jest szybsze: JMP lub ciąg NOPów?
- 8. Wydajność skompilowanego drzewa wyrażeń
- 9. Jawne drzewa wyrażeń
- 10. Łączenie wielu wyrażeń drzewa
- 11. Co oznacza "emitowanie" w terminach ogólnych informatyki?
- 12. Co jest lepsze/szybsze? Spróbuj złapać lub uniknąć wyjątku?
- 13. Co jest szybsze, surowe style CSS lub wbudowane w ReactJS?
- 14. Co jest szybsze: powtarzanie stylów lub powtarzanie selektorów?
- 15. Tworzenie drzewa wyrażeń w R
- 16. Lua - Jeśli i i, co jest szybsze?
- 17. Notacja Postfix do drzewa wyrażeń
- 18. Co jest szybsze: Union czy Concat?
- 19. Co jest szybsze niż std :: pow?
- 20. Wyodrębnij nazwę metody z drzewa wyrażeń?
- 21. Dodawanie węzła/właściwości do drzewa wyrażeń
- 22. Co jest szybsze w pamięci, intach lub znakach? Czy mapowanie plików lub czytanie fragmentów?
- 23. kiedy iw jakim scenariuszu używać drzewa wyrażeń
- 24. Drzewa wyrażeń - niepotrzebne przekształcenie w int32
- 25. Jak określić głębokość drzewa wyrażeń C#?
- 26. Uzyskiwanie dostępu do indeksu z drzewa wyrażeń
- 27. Drzewa wyrażeń Linq w zwartej strukturze
- 28. co jest lepszego php, JSP lub inne
- 29. Co jest szybciej w IN lub OR?
- 30. Co sprawia, że jedno z tych zapytań jest szybsze?
Ponieważ jestem pewien, że już to wypróbowałeś, podziel się swoimi wynikami. –
Naprawdę próbuję się do tego przydać, czy istnieje pewna zasadnicza różnica w sposobie kompilacji drzewek wyrażeń. Na przykład istnieje zasadnicza różnica w sposobie wykonywania metody przez odbicie, w jaki sposób jest wykonywane, powiedzmy, kiedy jest wywoływana z drzewa wyrażeń lub przez wiązanie dynamiczne. Zastanawiam się więc, czy "kompilacja" drzewek ekspresji daje wynik, który jest w pewien sposób znacząco różny od tego, co wygenerował IL generowany ręcznie. – sircodesalot
Spróbuj obu sposobów, wyjdź stoper, wkrótce będziesz wiedzieć, która jest szybsza. To jedyny sposób na poznanie. –