Krav: Da jeg kiggede på .NET-kildekoden, fandt jeg, at nogle metoder har tilføjet funktionen [MethodImpl(MethodImplOptions.AggressiveInlining)], men jeg så, at MethodImpl-funktionen kan påvirke JIT-kompilatorens adfærd. Nogle tests blev udført baseret på information fra internettet.
MethodImplOptions-konfiguration
Kodeks:
Inline-funktion
Inden for datalogi er en inline-funktion (nogle gange kaldet en online-funktion eller en compile-time udvidelsesfunktion) en programmeringssprogskonstruktion, der bruges til at foreslå, at compilerens inline-udvidelser (nogle gange kaldet online-udvidelser) til nogle specielle funktioner; Det betyder, at compileren indsætter og erstatter den specificerede funktionskrop i stedet for hvert sted (kontekst), hvor funktionen kaldes, hvilket sparer den ekstra tid, der bruges på hvert kald til funktionen. Men når man vælger at bruge inline-funktioner, er det nødvendigt at afveje den plads, programmet optager, og effektiviteten af programudførelsen, fordi for mange komplekse funktioner til inline-udvidelse vil medføre store lagringsomkostninger. Det er også vigtigt at bemærke, at inline-udvidelser af rekursive funktioner kan forårsage uendelig kompilering af nogle compilere.
MetodeImplOptions.AggressiveInlining
Funktion: Det anbefales, at JIT-kompilatoren inline metoden så meget som muligt. Forklaring: Inline refererer til at erstatte et funktionskald med selve funktionskroppen, hvilket reducerer overheaden ved funktionskaldet. Relevante scenarier: Egnet til små, ofte kaldte metoder (f.eks. attributaccessorer, simple matematiske beregninger osv.). Bemærk: Dette er blot et "forslag", JIT-kompilatoren kan beslutte, om den faktisk skal inline eller ej, afhængigt af den faktiske situation.
Resultaterne af testen "inline" og "not inline" er som følger:
Testkoden er som følger:
Det blev fundet, at CPU-forbruget efter inline var meget lavere end for ikke-inline opkald, faktisk ogsåVær ikke for nervøs, nutidens compilere er meget smarte, selv uden at tilføje denne funktion kan compileren hjælpe dig med automatisk optimering。 |