Požiadavky: Pri pohľade na zdrojový kód .NET som zistil, že niektoré metódy pridali funkciu [MethodImpl(MethodImplOptions.AggressiveInlining)], ale videl som, že funkcia MethodImpl môže ovplyvniť správanie kompilátora JIT. Niektoré testy boli vykonané na základe informácií z internetu.
Konfigurácia MethodImplOptions
Kód:
Inline funkcia
V informatike je inline funkcia (niekedy nazývaná online funkcia alebo rozširujúca funkcia v čase kompilácie) konštrukt programovacieho jazyka používaný na navrhnutie, že kompilátor inline rozšírenia (niekedy nazývané online rozšírenia) k nejakým špeciálnym funkciám; To znamená, že kompilátor vkladá a nahrádza špecifikované telo funkcie namiesto každého miesta (kontextu), kde je funkcia volaná, čím ušetrí dodatočný čas strávený na každom volaní funkcie. Pri výbere použitia inline funkcií je však potrebné zvážiť priestor zaberaný programom a efektivitu vykonávania programu, pretože príliš veľa zložitých funkcií na inline rozšírenie znamená veľké náklady na úložné zdroje. Je tiež dôležité poznamenať, že inline rozšírenia rekurzívnych funkcií môžu spôsobiť nekonečnú kompiláciu niektorých kompilátorov.
MethodImplOptions.AggressiveInlining
Funkcia: Odporúča sa, aby JIT kompilátor metódu vkladal čo najviac. Vysvetlenie: Inline znamená nahradenie volania funkcie samotným telom funkcie, čím sa znižuje režijná záťaž volania funkcie. Použiteľné scenáre: Vhodné pre malé, často nazývané metódy (napr. atribútové doplnky, jednoduché matematické výpočty a pod.). Poznámka: Toto je len "návrh", JIT kompilátor sa môže rozhodnúť, či ho skutočne inline alebo nie, v závislosti od konkrétnej situácie.
Výsledky testu "inline" a "not inline" sú nasledovné:
Testovací kód je nasledovný:
Zistilo sa, že využitie CPU po inline hovoroch bolo oveľa nižšie ako pri ne-inline hovoroch, a to tiežNebuďte príliš nervózni, dnešné kompilátory sú veľmi inteligentné, aj bez pridania tejto funkcie vám kompilátor môže pomôcť automaticky optimalizovať。 |