Prasības: Aplūkojot .NET avota kodu, es atklāju, ka dažas metodes ir pievienojušas funkciju [MethodImpl(MethodImplOptions.AggressiveInlining)], bet es redzēju, ka MethodImpl funkcija var ietekmēt JIT kompilatora uzvedību. Daži testi tika veikti, pamatojoties uz informāciju internetā.
MethodImplOptions konfigurācija
Kods:
Iekļautā funkcija
Datorzinātnē inline funkcija (dažreiz saukta par tiešsaistes funkciju vai kompilācijas laika paplašināšanas funkciju) ir programmēšanas valodas konstrukcija, ko izmanto, lai ieteiktu, ka kompilators inline paplašinājumus (dažreiz sauc par tiešsaistes paplašinājumiem) dažām īpašām funkcijām; Tas nozīmē, ka kompilators ievieto un aizstāj norādīto funkcijas ķermeni katras vietas (konteksta) vietā, kur funkcija tiek izsaukta, ietaupot papildu laiku, kas pavadīts katram funkcijas izsaukumam. Tomēr, izvēloties izmantot iekļautās funkcijas, ir jāizvērtē programmas aizņemtā vieta un programmas izpildes efektivitāte, jo pārāk daudz sarežģītu funkciju iekļaušanai radīs lielus krātuves resursu izdevumus. Ir arī svarīgi atzīmēt, ka rekursīvo funkciju inline paplašinājumi var izraisīt dažu kompilatoru bezgalīgu kompilāciju.
MethodImplOptions.AggressiveInlining
Funkcija: Ieteicams, lai JIT kompilators pēc iespējas vairāk iekļautu metodi. Paskaidrojums: Inline attiecas uz funkcijas izsaukuma aizstāšanu ar pašu funkcijas ķermeni, tādējādi samazinot funkcijas izsaukuma pieskaitāmās izmaksas. Piemērojamie scenāriji: Piemērots mazām, bieži sauktām metodēm (piemēram, atribūtu pieklājniekiem, vienkāršiem matemātiskiem aprēķiniem utt.). Piezīme: Tas ir tikai "ieteikums", JIT kompilators var izlemt, vai faktiski iekļaut vai nē, atkarībā no faktiskās situācijas.
Testa "inline" un "not inline" rezultāti ir šādi:
Testa kods ir šāds:
Tika konstatēts, ka CPU lietojums pēc inline bija daudz zemāks nekā ne-inline zvaniem, patiesībā arīNeuztraucieties, mūsdienu kompilatori ir ļoti gudri, pat nepievienojot šo funkciju, kompilators var palīdzēt automātiski optimizēt。 |