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

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

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

Дата

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

Редактор

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

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

ORCID

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

Номер ISSN

Назва тому

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

Reflection optimization method in .NET using dynamic compilation of lambda functions

Анотація

Розглянуто та проаналізовано методи оптимізації рефлексії в .NET. Основним методом оптимізації є використання динамічної компіляції лямбда функцій за рахунок використання інших методів метапрограмування. Одним із підходів, що дозволяють досягти необхідного результату, є використання компіляції Expression. Виклик скомпільованої лямбда функції є швидшим за виклик рефлексії, але сама компіляція займає певний час. Для цього необхідно зберігати делегат скомпільованої функції в пам’яті для можливості її повторного виклику. У ході експериментів визначено, що на версіях .NET7 і вище пошук в кеші та виклик такої функції сумарно займає стільки ж часу, як і виклик рефлексії. Таким чином, для покращення швидкодії методу необхідно спочатку оптимізувати структуру даних, що зберігає лямбда функції. Було використано більш ефективну з точки зору пошуку структуру даних. За результатами експериментів встановлено, що така оптимізація дозволила підвищити швидкодію методу. Нова структура даних дозволила використати реалізації хеш таблиць, оптимізованих під роботу з незмінюваними даними, що, в свою чергу, дозволило додатково підвищити швидкодію методу. Проте такий підхід є можливим для використання лише у версіях .NET8 та вище. Для оптимізації роботи методу у випадках послідовного виклику для одного й того ж типу даних було використано кешування інформації про останній тип даних, для якого використовувався метод. Проведено експерименти для визначення швидкодії розробленого методу у порівнянні з рефлексією та методами, що використовують схожий принцип. Для проведення експериментів було використано бібліотеку Benchmark.NET. За результатами експериментів встановлено, що розроблений метод має кращу швидкодію у порівнянні з рефлексією та аналогами
Reflection optimization methods in .NET are analyzed. The main method of optimization is the use of dynamic compilation of lambda functions. One approach to achieve the desired result is to use Expression compilation. Calling a compiled lambda function is faster than calling reflection, but the compilation itself takes some time. To avoid this drawback, it is necessary to store the delegate of the compiled function in memory so that it can be called again. In the course of experiments, it was determined that on versions .NET7 and higher, searching in the cache and calling such a function takes the same amount of time as calling reflection. Thus, to improve the speed of the method, it is necessary to optimize the data structure that stores the lambda function. Two-level hash-table was used to optimize search and storage of lambda functions. According to the results of the experiments, it was established that such optimization made it possible to improve the performance of the method. The new data structure also made it possible to use implementations of hash tables optimized for working with unchanged data, which allowed to further increase the performance of the method. However, this approach is only possible for use in .NET8 and higher versions. To optimize the method in cases of successive calls for the same data type, caching of information about the last data type for which the method was called was used. Experiments were conducted to determine the speed of the developed method in comparison with reflection and methods using a similar principle. The Benchmark.NET library was used to conduct experiments. According to the results of the experiments, it was established that the developed method has a better speed compared to reflection and analogues.

Опис

УДК

Мова

Серія, номер

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

ISBN

ББК

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

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

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

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

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

Позур М. Ю., Войтко В. Метод оптимізації рефлексії в .NET за рахунок використання динамічної компіляції лямбда функцій // Вісник Хмельницького національного університету. Серія: Технічні науки. 2024. Т. 339, № 4. С. 414-419. DOI: https://doi.org/10.31891/2307-5732-2024-339-4-62.

Схвалення

Рецензія

Доповнено

Цитується в