<link rel="stylesheet" href="styles.f3b1fba60ec7970c.css">

Метод динамічних викликів в .NET шляхом генерації IL коду в процесі виконання застосунку

Вантажиться...
Ескіз

Дата

Науковий керівник

Редактор

Інші учасники

Відповідальний

ORCID

Назва журналу

Номер ISSN

Назва тому

Альтернативна назва

Method of executing dynamic calls in .NET using IL generation in runtime

Анотація

The article discusses the development of a method for making dynamic calls in .NET by generating IL code during application execution. The main method for making dynamic calls in .NET which relies on using reflection was analyzed. It was determined that the key disadvantage of the reflection in a context of making dynamic calls is its performance, so there is a need to find an alternative solution for making dynamic calls. A method was developed that will allow making dynamic calls in a same way as by using reflection, but with a better performance. The proposed solution is based on the use of a metadata structure, similar to the reflection, where the metadata of type members are associated with corresponding static calls. This way using a reflection dynamic call can be avoided. Such a structure defines an association between the own type metadata and the reflection type metadata, implemented using hash tables. This allows obtaining the necessary metadata for the object in a same way as by using reflection. Metadata generation occurs during application execution through the use of specially defined functionality or automatically when attempting to obtain type metadata if the latter is missing in the system, which allows using the proposed method for both data types that were added during application execution and anonymous data types. Static calls associated with the corresponding metadata are generated along with the metadata. To generate static calls, it is proposed to use the functionality of the .NET platform, which allows for extending the application’s bytecode in runtime. This category includes the Expression mechanism, which allows you to build expressions during application execution and compile them into lambda functions, and Reflection.Emit, which allows you to write program components directly at the bytecode level during application execution. The proposed method of dynamic calls was implemented as a library. The functionality of generating static calls was developed using the Expression mechanism. The performance of the proposed method was tested using the Benchmark.NET library
У статті розглядається розробка методу здійснення динамічних викликів в .NET шляхом генерації IL коду в процесі виконання застосунку. Було проаналізовано основний спосіб здійснення динамічних викликів в .NET з використанням рефлексії. Визначено, що ключовим недоліком рефлексії є її швидкодія, тому існує необхідність пошуку альтернативного рішення для здійснення динамічних викликів. Було розроблено метод, який дозволить здійснювати динамічні виклики аналогічно до рефлексії, але з вищою швидкодією. Запропоноване рішення опирається на використання структури метаданих, аналогічно до рефлексії, де метадані членів типу даних асоціюються з відповідними статичними викликами без використання динамічного виклику рефлексії. Така структура використовує асоціацію між власними метаданими типу та метаданими типу рефлексії, реалізовану з використанням хеш-таблиць, що дозволяє отримувати необхідні метадані об\"єкту аналогічно до рефлексії. Генерація метаданих відбувається в процесі виконання застосунку через використання спеціально визначеного функціоналу або автоматично при спробі отримання метаданих типу, якщо останній відсутній в системі, що дозволяє використовувати запропонований метод як для типів даних, які були доданими в процесі виконання застосунку, так і анонімних типів даних. Статичні виклики, які асоціюються з відповідними метаданими, генеруються разом з метаданими. Для генерації статичних викликів пропонується використання функціоналу платформи .NET, що дозволяє розширити байт-код додатку в процесі виконання. До цієї категорії відноситься механізм Expression, що дозволяє будувати вирази в процесі виконання додатку та компілювати їх в лямбда-функції, та Reflection.Emit, що дозволяє написання програмних компонентів безпосередньо на рівні байт-коду в процесі виконання застосунку. Запропонований метод динамічних викликів було реалізовано у вигляді бібліотеки. Функціонал генерації статичних викликів розроблено з використанням механізму Expression. Швидкодія запропонованого методу перевірена з використанням бібліотеки Benchmark.NET.

Опис

УДК

Мова

Посилання на публікацію

Серія, номер

Технічні науки

ISBN

ББК

Інші ідентифікатори

Пов’язані матеріали

Спонсорська підтримка

Правовласник

Бібліографічний опис

Войтко В. В., Позур М. Ю. Метод динамічних викликів в .NET шляхом генерації IL коду в процесі виконання застосунку // Вчені записки Таврійського національного університету імені В.І. Вернадського. Серія: Технічні науки. 2025. Т. 36 (75), № 3, ч. 2. С. 132-137. DOI: https://doi.org/10.32782/2663-5941/2025.3.2/18.

Схвалення

Рецензія

Доповнено

Цитується в