tormozit / RDT1C

Подсистема "Инструменты разработчика" для платформы 1С 8
http://devtool1c.ucoz.ru
88 stars 9 forks source link

При сборке информации о метаданных происходит избыточная проверка ролей на ПравоДоступа #406

Closed PerlAmutor closed 1 year ago

PerlAmutor commented 1 year ago
Информация для технической поддержки Платформа: 8.3.20.1996 Режим БД: файловый Конфигурация. Название: 1С:ERP Управление предприятием 2 (2.5.12.28) Конфигурация. Основной режим запуска: Управляемое приложение Конфигурация. Вариант встроенного языка: Русский Конфигурация. Режим управления блокировкой данных: Управляемый Конфигурация. Режим совместимости: Версия8_3_17 Конфигурация. Режим использования синхронных вызовов: Использовать Конфигурация. Версия БСП: 301 Инструменты разработчика. Версия: Портативный 6.70.1p Инструменты разработчика. Инструмент: Редактор остатков Инструменты разработчика. Перехват клавиатурного ввода: Да Инструменты разработчика. Объекты на сервере: Да Инструменты разработчика. Серверный модуль: Да Клиент. Приложение: Обычное приложение 64б Клиент. Проверка модальных вызовов: Нет Клиент. Язык интерфейса конфигурации: ru Клиент. Язык интерфейса системы: ru Клиент. Отладка разрешена: Нет Клиент. Постоянный кэш метаданных: Да Клиент. ОС: Майкрософт Windows 10 Pro 64-разрядная Русский Клиент. ОС от имени администратора: Нет Клиент. ОС выполнение BAT: Да Клиент. ОС Текущая кодовая страница: 866

В функции ДеревоОбъектовМД() ирПлатформа.epf происходит избыточная проверка ПраваДоступа() на Метаданные с типом Роль. В ERP таких ролей за 1700.

image

image

image

tormozit commented 1 year ago

Согласен, что проверка избыточная, но платформа для неподходящих метаданных очень быстро возвращает результат. Все выполнения этой строки вместе идут 280мс на 14000 объектов. Значит 1700 ролей максимум где то 30мс занимают, а скорее всего 10мс. На фоне 10000мс+ твоего замера это кажется каплей в море.

PerlAmutor commented 1 year ago

В клиент-серверной базе оно конечно подольше идет.

tormozit commented 1 year ago

Метод ПравоДоступа() не вызывает обращение к серверу. Поэтому в клиент-серверной базе должны быть те же затраты.

tormozit commented 1 year ago

Сделай нормальный тест своей гипотезы - цикл чисто с ролями. И покажи результат его замера.

PerlAmutor commented 1 year ago

Сделал, судя по всему первый запуск долгий, т.к. все-таки идет какое-то обращение к серверу и затем это кэшируется.

image

ЦиклСОрялми.zip

643 мс. для первого запуска это не много но и не мало.

tormozit commented 1 year ago

Думаю вопрос можно считать закрытым, т.к. роли я все равно будут обходить, и чисто вызовы ПравоДоступа(<Роль>) занимают мизерное время. Время тут в первом обходе уходит в основном на обращение к метаданным. Плохо что ты не показал построчный замер.