Vaatimukset: Tutkiessani .NET-lähdekoodia huomasin, että jotkut metodit ovat lisänneet [MethodImpl(MethodImplOptions.AggressiveInlining)] -ominaisuuden, mutta huomasin, että MethodImpl -ominaisuus voi vaikuttaa JIT-kääntäjän käyttäytymiseen. Joitakin testejä tehtiin internetin tietojen perusteella.
MethodImplOptions-konfiguraatio
Koodi:
Inline-funktio
Tietojenkäsittelytieteessä inline-funktio (jota kutsutaan joskus online-funktioksi tai käännösaika-laajennusfunktioksi) on ohjelmointikielen rakenne, jolla ehdotetaan, että kääntäjän inline-laajennukset (joskus kutsutaan online-laajennuksiksi) joihinkin erityisfunktioihin; Tämä tarkoittaa, että kääntäjä lisää ja korvaa määritellyn funktion rungon jokaisen kutsupaikan (kontekstin) tilalle, säästäen ylimääräisen ajan, joka kuluu jokaiseen kutsuun funktiolle. Kuitenkin inline-funktioita valittaessa on tarpeen punnita ohjelman viemää tilaa ja ohjelman suorituksen tehokkuutta, koska liian monet monimutkaiset funktiot inline-laajennukseen aiheuttavat suuria tallennusresurssikustannuksia. On myös tärkeää huomata, että rekursiivisten funktioiden inline-laajennukset voivat aiheuttaa joidenkin kääntäjien äärettömän kääntämisen.
MethodImplOptions.AggressiveInlining
Toiminto: Suositellaan, että JIT-kääntäjä inlineertää metodia mahdollisimman paljon. Selitys: Inline-tarkoittaa funktiokutsun korvaamista itse funktiokeholla, jolloin funktiokutsun ylikuormitus vähenee. Soveltuvat skenaariot: Sopivat pieniin, usein kutsuttuihin metodeihin (esim. attribuuttilisäajat, yksinkertaiset matemaattiset laskelmat jne.). Huomautus: Tämä on vain "ehdotus", JIT-kääntäjä voi päättää, haluaako se oikeasti inline-tiedoston vai ei, riippuen todellisesta tilanteesta.
Testin tulokset "inline" ja "ei inline" ovat seuraavat:
Testikoodi on seuraava:
Havaittiin, että suorittimen käyttö linjan jälkeen oli paljon alhaisempi kuin ei-inline-puheluissa, itse asiassa myösÄlä ole liian huolissasi, nykyiset kääntäjät ovat todella fiksuja, vaikka tätä ominaisuutta ei lisätä, kääntäjä voi auttaa sinua optimoimaan automaattisesti。 |