Követelmények: Amikor a .NET forráskódot néztem, azt tapasztaltam, hogy néhány módszer hozzáadta a [MethodImpl(MethodImplOptions.AggressiveInlining)] funkciót, de láttam, hogy a MethodImpl funkció befolyásolhatja a JIT fordító viselkedését. Néhány tesztet az interneten szerzett információk alapján végeztek.
MethodImplOptions konfiguráció
Kód:
Inline függvény
A számítástechnikában az inline függvény (néha online függvénynek vagy fordítóidejű bővítési függvénynek is nevezik) egy programozási nyelvi konstrukció, amelyet arra használnak, hogy a fordító sorbeli kiterjesztéseket (néha online kiterjesztéseknek is nevezik) bizonyos speciális függvényekhez használjanak; Ez azt jelenti, hogy a fordító a megadott függvénytestet helyezi be és helyettesíti minden hely (kontextus) helyére, ahol a függvényt hívják, így megtakarítva a függvény hívására fordított plusz időt. Azonban az inline függvények használatakor mérlegelni kell a program által elfoglalt helyet és a program végrehajtásának hatékonyságát, mert túl sok összetett funkció az inline bővítéshez nagy tárolási erőforrás-költségeket eredményez. Fontos megjegyezni, hogy a rekurzív függvények inline kiterjesztései bizonyos fordítók végtelen fordítását okozhatják.
MethodImplOptions.AggressiveInlining
Funkció: Ajánlott, hogy a JIT fordító a lehető legtöbbet besorolja a metódusot. Magyarázat: Az inline azt jelenti, hogy egy függvényhívást magával a függvény testével helyettesítenek, így csökkentve a függvényhívás túlterhelését. Alkalmazható forgatókönyvek: Alkalmasak kis, gyakran nevezett metódusokhoz (pl. attribútum-hozzáférések, egyszerű matematikai számítások stb.). Megjegyzés: Ez csupán egy "javaslat", a JIT fordító dönthet arról, hogy ténylegesen beilleszkedik-e vagy sem, a helyzettől függően.
A "inline" és "not inline" teszt eredményei a következők:
A tesztkód a következő:
Megállapították, hogy a CPU-használat az inline hívások után sokkal alacsonyabb volt, mint a nem inline hívásokké, sőt, szinténNe aggódj túlzottan, a mai fordítók nagyon okosak, még ha nem is hozzáadnád ezt a funkciót, a fordító automatikusan segíthet optimalizálni。 |