Odpowiedz
Co to jest
W kategoriach C i C++ użyć słowa kluczowego inline aby poinformować kompilator zadzwonić rutynowych bez obciążania popychanie parametrów na stos. Funkcja zamiast tego ma swój kod maszynowy wstawiony do funkcji, w której został wywołany. Może to spowodować znaczny wzrost wydajności w niektórych scenariuszach.
Niebezpieczeństwa
Korzyści prędkości w użyciu „inline” spadek znacząco jak wielkość wzrasta funkcji inline. Overuse może spowodować spowolnienie działania programu. Podkreślenie bardzo małej funkcji akcesora zazwyczaj zmniejsza rozmiar kodu, a umieszczenie bardzo dużej funkcji może znacznie zwiększyć rozmiar kodu.
inline w C#
W języku C# inline dzieje na poziomie JIT, w którym kompilator JIT podejmuje decyzję. Obecnie nie ma mechanizmu w języku C#, który można wyraźnie to zrobić. Jeśli chcesz wiedzieć, co robi kompilator JIT, możesz zadzwonić: System.Reflection.MethodBase.GetCurrentMethod().Name
w czasie wykonywania. Jeśli metoda zostanie wstawiona, zwróci nazwę osoby dzwoniącej.
W języku C# nie można wymusić na inline metody, ale można wymusić na niej metodę. Jeśli naprawdę potrzebujesz dostępu do konkretnego programu do obsługi połączeń i musisz usunąć inline, możesz użyć: MethodImplAttribute
z MethodImplOptions.NoInlining
. Dodatkowo, jeśli metoda zostanie zadeklarowana jako wirtualna, nie będzie również wstawiana przez JIT. Powodem tego jest to, że ostateczny cel połączenia jest nieznany.
Aby być bardziej poprawne, don "t" powiedz kompilatorowi, "ty" zrób sugestię kompilatorowi, że może, ale nie musi, uważać. " –
Definicja i omówienie inliningu, see this question.
W języku C# nie trzeba poinstruować kompilatora ani czasu wykonywania, aby wstawić, ponieważ czas działania zrobi to automatycznie.
P.S. Ta odpowiedź jest również poprawna w przypadku języka Java.
inline jest, gdy zamiast wywoływania danej funkcji zawartość funkcji są wykonywane bezpośrednio w miejscu wywołania. Głównym powodem wykonania tej czynności jest usunięcie kosztów wywoływania funkcji przez uruchomienie zawartości funkcji w miejscu wywołania.
Jest używany jako technika optymalizacji. W przypadku C#, to faktycznie zależy od silnika CLR JIT do wykonania pracy. W środowisku uruchomieniowym podczas kompilowania metody silnik JIT będzie używał heurystyki do określenia, czy funkcja wbudowana jest odpowiednia i czy będzie optymalizacją efektywną. Jeśli tak, wykonywana jest inline.
Vance ma świetny artykuł na temat tego, co uważa JIT gdy inline: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to-inline-that-is-the-question.aspx
Nie ma sposobu, aby wymusić inline w C#. Język nie obsługuje tej konstrukcji. Głównie dlatego, że ludzie są bardzo kiepskimi sędziami, co należy zoptymalizować. JITer jest znacznie lepszym sędzią.
Cytując Eric Gunnerson
inlining happens at the JIT level, and the JIT generally makes a decent decision
- 1. Wyświetlane podpowiedzi
- 2. typ Clojure podpowiedzi składni
- 3. podpowiedzi typu w namedtuple
- 4. Chart.js: zmiana szablonu podpowiedzi
- 5. Wybierz numer bez podpowiedzi
- 6. Wartości podpowiedzi formatu jqplot
- 7. Aparaty i podpowiedzi PHP
- 8. Kolor podpowiedzi TextInputLayout
- 9. Zalecenia dla podpowiedzi jQuery
- 10. Najmniejszy skrypt podpowiedzi (bez jQuery)
- 11. zestaw podpowiedzi dla niepełnosprawnego przycisku
- 12. Narzędzie do formatowania podpowiedzi Highcharts
- 13. Format daty w podpowiedzi ggplotly
- 14. Dostosowywanie podpowiedzi sprawdzania poprawności Bootstrap?
- 15. Jak uruchomić Scala z podpowiedzi
- 16. Jak korzystać z opcjonalnych podpowiedzi?
- 17. Rodzaj podpowiedzi w zmiennych klasowych
- 18. Interaktywne podpowiedzi w matplotlib plot
- 19. Jak korzystać z podpowiedzi bootstrap?
- 20. jquery ui konflikt podpowiedzi z bootstrap 3 tooltip
- 21. Scala: funkcje normalne a funkcje korkowane?
- 22. Delphi 2010 Szerokie funkcje a funkcje ciągów
- 23. Czy funkcje wielomianów mogą wykorzystywać funkcje stałoprzecinkowe?
- 24. jQuery dialog UI z podpowiedzi powoduje wyświetlanie podpowiedzi na otwarciu, nie unoszą
- 25. Funkcje wbudowane
- 26. Funkcje FORTRAN
- 27. (Kiedy) powinienem użyć podpowiedzi typu w PHP?
- 28. Ukrywanie natywnej podpowiedzi przy użyciu jQuery
- 29. Jak odwracać podpowiedzi na Twitterze Bootstrapa
- 30. Ostrzeżenia dotyczące obciążenia z podpowiedzi GHCi
również zobaczyć to pytanie: –