Nõuded: .NET lähtekoodi vaadates leidsin, et mõned meetodid on lisanud [MethodImpl(MethodImplOptions.AggressiveInlining)] funktsiooni, kuid nägin, et MethodImpl funktsioon võib mõjutada JIT kompilaatori käitumist. Mõned testid viidi läbi internetis leiduva info põhjal.
MethodImplOptions konfiguratsioon
Kood:
Inline-funktsioon
Arvutiteaduses on inline-funktsioon (mõnikord nimetatud online-funktsiooniks või kompileerimisaegseks laiendusfunktsiooniks) programmeerimiskeele konstruktsioon, mida kasutatakse selleks, et viidata kompilaatori inline-laiendustele (mõnikord nimetatakse online-laiendusteks) mõnele erifunktsioonile; See tähendab, et kompilaator lisab ja asendab määratud funktsiooni keha iga koha (konteksti) asemel, kus funktsioon kutsutakse, säästes iga funktsiooni kutsumise lisaaega. Kuid inline-funktsioonide kasutamisel tuleb kaaluda programmi ruumi ja programmi täitmise efektiivsust, sest liiga palju keerukaid funktsioone inline-laienduseks toob kaasa suuri salvestusressursside kulusid. Samuti on oluline märkida, et rekursiivsete funktsioonide inline laiendus võib põhjustada mõnede kompilaatorite lõpmatut kompileerimist.
MethodImplOptions.AggressiveInlining
Funktsioon: Soovitatav on, et JIT kompilaator sisestaks meetodi võimalikult palju sisse. Selgitus: Inline tähendab funktsioonikutse asendamist funktsiooni kehaga, vähendades seeläbi funktsioonikutse koormust. Rakendatavad stsenaariumid: Sobivad väikeste, sageli nimetatud meetodite jaoks (nt atribuudi lisajad, lihtsad matemaatilised arvutused jne). Märkus: See on lihtsalt "soovitus", JIT-i kompilaator võib otsustada, kas tegelikult inline-faili teha või mitte, sõltuvalt tegelikust olukorrast.
Testi tulemused "inline" ja "not inline" on järgmised:
Testkood on järgmine:
Leiti, et protsessori kasutus pärast inline-kõnesid oli palju madalam kui mitte-inline-kõnedelÄra ole liiga mures, tänapäeva kompilaatorid on väga nutikad, isegi ilma selle funktsioonita võib kompilaator aidata sul automaatselt optimeerida。 |