Wymagania: Przeglądając kod źródłowy .NET, zauważyłem, że niektóre metody dodały funkcję [MethodImpl(MethodImplOptions.AggressiveInlining)], ale zauważyłem, że funkcja MethodImpl może wpływać na zachowanie kompilatora JIT. Niektóre testy przeprowadzono na podstawie informacji z Internetu.
Konfiguracja MethodImplOptions
Kod:
Funkcja inline
W informatyce funkcja inline (czasem nazywana funkcją online lub funkcją rozbudowy w czasie kompilacji) to konstrukcja języka programowania używana do sugerowania, że kompilator rozszerza inline (czasem nazywane rozszerzeniami online) do pewnych specjalnych funkcji; Oznacza to, że kompilator wstawia i zastępuje określony ciało funkcji w miejsce każdego miejsca (kontekstu), w którym funkcja jest wywoływana, oszczędzając dodatkowy czas poświęcony na każde wywołanie funkcji. Jednak przy wyborze funkcji inline należy rozważyć przestrzeń zajmowaną przez program oraz efektywność jego wykonywania, ponieważ zbyt wiele złożonych funkcji do rozbudowy inline wiąże się z dużymi kosztami zasobów pamięci. Ważne jest również, aby zauważyć, że rozszerzenia inline funkcji rekurencyjnych mogą powodować nieskończoną kompilację niektórych kompilatorów.
MethodImplOptions.AggressiveInlining
Funkcja: Zaleca się, aby kompilator JIT wprowadzał metodę w jak największym stopniu. Wyjaśnienie: Inline oznacza zastąpienie wywołania funkcji samym ciałem funkcji, co zmniejsza narzut wywołania funkcji. Scenariusze stosowalne: Odpowiednie dla małych, często nazywanych metod (np. atrybutowe akwiory, proste obliczenia matematyczne itp.). Uwaga: To tylko "sugestia", kompilator JIT może zdecydować, czy faktycznie wprowadzić linię, w zależności od sytuacji.
Wyniki testu "inline" i "not inline" są następujące:
Kod testu jest następujący:
Okazało się, że zużycie CPU po inline było znacznie niższe niż w przypadku wywołań nieinline, co równieżNie martw się zbytnio, dzisiejsze kompilatory są bardzo inteligentne, nawet bez dodania tej funkcji kompilator może pomóc Ci automatycznie zoptymalizować。 |