Zahteve: Ko sem pregledal izvorno kodo .NET, sem ugotovil, da so nekatere metode dodale funkcijo [MethodImpl(MethodImplOptions.AggressiveInlining)], vendar sem opazil, da funkcija MethodImpl lahko vpliva na delovanje JIT prevajalnika. Nekateri testi so bili izvedeni na podlagi informacij z interneta.
Konfiguracija MethodImplOptions
Koda:
Vgrajena funkcija
V računalništvu je vgrajena funkcija (včasih imenovana spletna funkcija ali funkcija razširitve v času prevajanja) konstrukcija programskega jezika, ki predlaga, da prevajalnik v liniji razširi (včasih imenovane spletne razširitve) za nekatere posebne funkcije; To pomeni, da prevajalnik vstavlja in zamenja določeno telo funkcije namesto vsakega mesta (konteksta), kjer je funkcija poklicana, s čimer prihrani dodatni čas, porabljen za vsak klic funkcije. Vendar pa je pri izbiri uporabe vgrajenih funkcij potrebno tehtati prostor, ki ga zaseda program, in učinkovitost izvajanja programa, saj preveč zapletenih funkcij za inline razširitev pomeni velike stroške shranjevanja. Pomembno je tudi poudariti, da lahko inline razširitve rekurzivnih funkcij povzročijo neskončno prevajanje nekaterih prevajalnikov.
MethodImplOptions.AggressiveInlining
Funkcija: Priporočljivo je, da JIT prevajalnik čim bolj vključi metodo. Razlaga: Inline pomeni zamenjavo klica funkcije s samim telesom funkcije, s čimer se zmanjša režija klica funkcije. Primerni scenariji: Primerni za majhne, pogosto imenovane metode (npr. atributni atributi, preprosti matematični izračuni itd.). Opomba: To je zgolj "predlog", JIT prevajalnik se lahko odloči, ali bo dejansko vstavil ali ne, odvisno od dejanske situacije.
Rezultati testa "inline" in "not inline" so naslednji:
Testna koda je naslednja:
Ugotovljeno je bilo, da je bila uporaba procesorja po inline povezavi precej nižja kot pri ne-inline klicih, pravzapravNe bodite preveč zaskrbljeni, današnji prevajalniki so zelo pametni, tudi brez te funkcije vam lahko prevajalnik pomaga samodejno optimizirati。 |