📌 Проблема
В RawEventDispatcher используется функция _resolve_real_name, которая пытается получить "реальное" имя функции через обход gc.get_referrers:
for obj in gc.get_referrers(code):
Данная операция:
- дорогая по времени выполнения
- выполняется на каждом событии трассировки
- работает в hot-path
🎯 Цель
Уменьшить накладные расходы на получение имени функции.
💡 Предлагаемое решение
Добавить кеш:
code -> resolved_name
Пример
self._code_name_cache: dict[CodeType, str]
И использовать:
if code in self._code_name_cache:
return self._code_name_cache[code]
🏗️ Предлагаемые изменения
- добавить кеш в RawEventDispatcher
- кешировать результат _resolve_real_name
- использовать кеш перед вызовом gc.get_referrers
- сохранять результат после вычисления
⚠️ Особенности
- code объекты hashable → можно использовать как ключ
- кеш не требует очистки (lifetime совпадает с программой)
- важно не сломать поддержку декоратора @trace
📈 Ожидаемый результат
- снижение нагрузки на GC
- ускорение обработки событий
- более стабильная производительность на больших трассировках
📌 Проблема
В
RawEventDispatcherиспользуется функция_resolve_real_name, которая пытается получить "реальное" имя функции через обходgc.get_referrers:Данная операция:
🎯 Цель
Уменьшить накладные расходы на получение имени функции.
💡 Предлагаемое решение
Добавить кеш:
code -> resolved_nameПример
self._code_name_cache: dict[CodeType, str]И использовать:
🏗️ Предлагаемые изменения
📈 Ожидаемый результат