Reikalavimai: Žiūrėdamas į .NET šaltinio kodą, pastebėjau, kad kai kurie metodai pridėjo [MethodImpl(MethodImplOptions.AggressiveInlining)] funkciją, tačiau pamačiau, kad MethodImpl funkcija gali turėti įtakos JIT kompiliatoriaus elgesiui. Kai kurie bandymai buvo atlikti remiantis informacija internete.
MethodImplOptions konfigūracija
Kodas:
Įdėtoji funkcija
Informatikoje inline funkcija (kartais vadinama internetine funkcija arba kompiliavimo laiko išplėtimo funkcija) yra programavimo kalbos konstruktas, naudojamas teigti, kad kompiliatorius įterpia kai kurių specialių funkcijų plėtinius (kartais vadinamus internetiniais plėtiniais); Tai reiškia, kad kompiliatorius įterpia ir pakeičia nurodytą funkcijos turinį vietoje kiekvienos vietos (konteksto), kur funkcija iškviečiama, taupydamas papildomą laiką, praleistą kiekvienam funkcijos iškvietimui. Tačiau renkantis naudoti tiesiogines funkcijas, būtina pasverti programos užimamą vietą ir programos vykdymo efektyvumą, nes per daug sudėtingų funkcijų įterptam išplėtimui atneš didelių saugyklos išteklių išlaidų. Taip pat svarbu pažymėti, kad rekursinių funkcijų plėtiniai gali sukelti begalinį kai kurių kompiliatorių kompiliavimą.
MethodImplOptions.AggressiveInlining
Funkcija: Rekomenduojama, kad JIT kompiliatorius kuo labiau įtrauktų metodą. Paaiškinimas: Inline reiškia funkcijos iškvietimo pakeitimą pačiu funkciniu kūnu, taip sumažinant funkcijos iškvietimo pridėtines išlaidas. Taikomi scenarijai: Tinka mažiems, dažnai vadinamiems metodams (pvz., atributų priesaiviams, paprastiems matematiniams skaičiavimams ir kt.). Pastaba: Tai tik "pasiūlymas", JIT kompiliatorius gali nuspręsti, ar iš tikrųjų inline, ar ne, priklausomai nuo faktinės situacijos.
Bandymo "inline" ir "not inline" rezultatai yra tokie:
Bandymo kodas yra toks:
Nustatyta, kad procesoriaus naudojimas po įėjimo buvo daug mažesnis nei netiesioginių skambučių, iš tikrųjų taip patNesijaudinkite, šiandieniniai kompiliatoriai yra labai protingi, net ir nepridedant šios funkcijos, kompiliatorius gali padėti automatiškai optimizuoti。 |