Eisen: Bij het bekijken van de .NET-broncode ontdekte ik dat sommige methoden de [MethodImpl(MethodImplOptions.AggressiveInlining)]-functie hebben toegevoegd, maar ik zag dat de MethodImpl-functie het gedrag van de JIT-compiler kan beïnvloeden. Sommige tests werden uitgevoerd op basis van informatie op internet.
MethodImplOptions-configuratie
Code:
Inlinefunctie
In de informatica is een inline-functie (soms een online functie of compile-time uitbreidingsfunctie genoemd) een programmeertaalconstructie die wordt gebruikt om te suggereren dat de compiler inline-extensies (soms online extensies genoemd) aan bepaalde speciale functies; Dit betekent dat de compiler het gespecificeerde functielichaam invoegt en vervangt in plaats van elke plaats (context) waar de functie wordt aangeroepen, waardoor de extra tijd die aan elke aanroep van de functie wordt besteed bespaart. Bij het kiezen van inline-functies is het echter noodzakelijk om de ruimte die het programma inneemt en de efficiëntie van de programma-uitvoering af te wegen, omdat te veel complexe functies voor inline-uitbreiding hoge opslagkosten met zich meebrengen. Het is ook belangrijk op te merken dat inline extensies van recursieve functies oneindige compilatie van sommige compilers kunnen veroorzaken.
MethodImplOptions.AggressiveInlining
Functie: Het wordt aanbevolen dat de JIT-compiler de methode zo veel mogelijk inlineert. Uitleg: Inline verwijst naar het vervangen van een functieaanroep door het functielichaam zelf, waardoor de overhead van de functieaanroep wordt verminderd. Toepasselijke scenario's: Geschikt voor kleine, vaak genoemde methoden (bijv. attribuutaccessors, eenvoudige wiskundige berekeningen, enz.). Let op: Dit is slechts een "suggestie", de JIT-compiler kan beslissen of hij daadwerkelijk inline of niet, afhankelijk van de situatie.
De resultaten van de test "inline" en "niet inline" zijn als volgt:
De testcode is als volgt:
Er werd vastgesteld dat het CPU-gebruik na inline veel lager was dan dat van niet-inline gesprekken, in feite ookWees niet te nerveus, de compilers van vandaag zijn erg slim, zelfs zonder deze functie toe te voegen, kan de compiler je helpen automatisch te optimaliseren。 |