МЕТОД ОПТИМІЗАЦІЇ РЕФЛЕКСІЇ В .NET ЗА РАХУНОК ВИКОРИСТАННЯ ДИНАМІЧНОЇ КОМПІЛЯЦІЇ ЛЯМБДА ФУНКЦІЙ

Автор(и)

DOI:

https://doi.org/10.31891/2307-5732-2024-339-4-62

Ключові слова:

метапрограмування, .NET, C#, рефлексія, Expression

Анотація

Розглянуто та проаналізовано методи оптимізації рефлексії в .NET. Основним методом оптимізації є використання динамічної компіляції лямбда функцій за рахунок використання інших методів метапрограмування. Одним із підходів, що дозволяють досягти необхідного результату, є використання компіляції Expression. Виклик скомпільованої лямбда функції є швидшим за виклик рефлексії, але сама компіляція займає певний час. Для цього необхідно зберігати делегат скомпільованої функції в пам’яті для можливості її повторного виклику. У ході експериментів визначено, що на версіях .NET7 і вище пошук в кеші та виклик такої функції сумарно займає стільки ж часу, як і виклик рефлексії. Таким чином, для покращення швидкодії методу необхідно спочатку оптимізувати структуру даних, що зберігає лямбда функції. Було використано більш ефективну з точки зору пошуку структуру даних. За результатами експериментів встановлено, що така оптимізація дозволила підвищити швидкодію методу. Нова структура даних дозволила використати реалізації хеш таблиць, оптимізованих під роботу з незмінюваними даними, що, в свою чергу, дозволило додатково підвищити швидкодію методу. Проте такий підхід є можливим для використання лише у версіях .NET8 та вище. Для оптимізації роботи методу у випадках послідовного виклику для одного й того ж типу даних було використано кешування інформації про останній тип даних, для якого використовувався метод. Проведено експерименти для визначення швидкодії розробленого методу у порівнянні з рефлексією та методами, що використовують схожий принцип. Для проведення експериментів було використано бібліотеку Benchmark.NET. За результатами експериментів встановлено, що розроблений метод має кращу швидкодію у порівнянні з рефлексією та аналогами.

Завантаження

Опубліковано

30.08.2024

Як цитувати

ПОЗУР, М. ., & ВОЙТКО, В. (2024). МЕТОД ОПТИМІЗАЦІЇ РЕФЛЕКСІЇ В .NET ЗА РАХУНОК ВИКОРИСТАННЯ ДИНАМІЧНОЇ КОМПІЛЯЦІЇ ЛЯМБДА ФУНКЦІЙ. Herald of Khmelnytskyi National University. Technical Sciences, 339(4), 414-419. https://doi.org/10.31891/2307-5732-2024-339-4-62