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
również zobaczyć to pytanie: –