Požadavky: Když jsem se podíval na zdrojový kód .NET, zjistil jsem, že některé metody přidaly funkci [MethodImpl(MethodImplOptions.AggressiveInlining)], ale viděl jsem, že funkce MethodImpl může ovlivnit chování JIT kompilátoru. Některé testy byly provedeny na základě informací z internetu.
Konfigurace MethodImplOptions
Kód:
Inline funkce
V informatice je inline funkce (někdy nazývaná online funkce nebo rozšiřující funkce v době kompilace) konstrukce programovacího jazyka používaná k navržení, že inline kompilátor rozšiřuje (někdy nazývaná online rozšíření) k některým speciálním funkcím; To znamená, že kompilátor vkládá a nahrazuje specifikované tělo funkce místo každého místa (kontextu), kde je funkce volána, čímž šetří čas strávený na každém volání funkce. Při volbě inline funkcí je však nutné zvážit prostor zabíraný programem a efektivitu jeho vykonání, protože příliš mnoho složitých funkcí pro inline rozšíření znamená velké náklady na úložné zdroje. Je také důležité poznamenat, že inline rozšíření rekurzivních funkcí mohou způsobit nekonečnou kompilaci některých kompilátorů.
MethodImplOptions.AggressiveInlining
Funkce: Doporučuje se, aby JIT kompilátor metodu co nejvíce inlineoval. Vysvětlení: Inline znamená nahrazení volání funkce samotným tělem funkce, čímž se snižuje režijní zatížení volání funkce. Použitelné scénáře: Vhodné pro malé, často nazývané metody (např. atributové doplňky, jednoduché matematické výpočty atd.). Poznámka: Toto je jen "návrh", JIT kompilátor může rozhodnout, zda skutečně inline nebo ne, v závislosti na konkrétní situaci.
Výsledky testu "inline" a "not inline" jsou následující:
Testovací kód je následující:
Zjistilo se, že využití CPU po inline hovorech bylo mnohem nižší než u ne-inline hovorů, a to takéNebuďte příliš nervózní, dnešní kompilátory jsou velmi chytré, i bez této funkce vám kompilátor může pomoci automaticky optimalizovat。 |