Изисквания: При разглеждане на .NET изходния код установих, че някои методи са добавили функцията [MethodImpl(MethodImplOptions.AggressiveInlining)], но видях, че функцията MethodImpl може да повлияе на поведението на JIT компилатора. Някои тестове бяха проведени въз основа на информация от интернет.
Конфигурация на MethodImplOptions
Код:
Инлайн функция
В компютърните науки инлайн функция (понякога наричана онлайн функция или функция за разширване по време на компилация) е конструкт от програмен език, използван за подсказване, че компилаторът създава вградени разширения (понякога наричани онлайн разширения) към някои специални функции; Това означава, че компилаторът вмъква и заменя зададеното тяло на функцията на мястото (контекст), където се извиква функцията, спестявайки допълнителното време, отделено за всяко извикване на функцията. Въпреки това, при избора на използване на inline функции е необходимо да се прецени пространството, което програмата заема, и ефективността на изпълнението, тъй като твърде много сложни функции за inline expansion ще доведат до големи разходи за ресурси за съхранение. Също така е важно да се отбележи, че инлайн разширенията на рекурсивни функции могат да причинят безкрайно компилиране на някои компилатори.
MethodImplOptions.AggressiveInlining
Функция: Препоръчва се JIT компилаторът да бъде инлайниран метода колкото е възможно повече. Обяснение: Инлайн се отнася до замяна на извикване на функция със самото тяло на функцията, като по този начин се намалява натоварването на извикването на функция. Приложими сценарии: Подходящи за малки, често наричани методи (например аксесори на атрибути, прости математически изчисления и др.). Забележка: Това е просто "предложение", JIT компилаторът може да реши дали да го инлайнира или не, в зависимост от конкретната ситуация.
Резултатите от теста "inline" и "not inline" са следните:
Тестовият код е следният:
Установено беше, че използването на процесора след inline е много по-ниско от това на не-инлайн повиквания, всъщност същоНе се притеснявайте прекалено, днешните компилатори са много умни, дори без да добавяте тази функция, компилаторът може да ви помогне автоматично да оптимизирате。 |