Каталог решений - Сравнение скорости получения имени класса через Метаданные.*.Содержит и через Метаданные().ПолноеИмя()

Сравнение скорости получения имени класса через Метаданные.*.Содержит и через Метаданные().ПолноеИмя()

Сравнение скорости получения имени класса через Метаданные.*.Содержит и через Метаданные().ПолноеИмя()

В наличии

Сравнение скорости двух методов определения класса объекта через его метаданные. Когда есть Объект, но неизвестно заранее, какой у него тип (например получен из реквизита типа ЛюбаяСсылка)

Категория:

Описание

Когда есть Объект, но неизвестно заранее, какой у него тип (например получен из реквизита типа ЛюбаяСсылка) приходится обращаться к Метаданным, но прямого способа получить класс (например, для использования при составлении текста запроса) 1С не даёт.

Проверил в подготовке новой версии «Браузера Хранилища» что будет быстрее — громоздкая конструкция

ТипЗначения = ТипЗнч(Объект);
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);
Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда Класс = "Справочник" ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда Класс = "Документ" ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных) Тогда Класс = "ПланВидовХарактеристик" ИначеЕсли Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных) Тогда Класс = "БизнесПроцесс" ИначеЕсли Метаданные.Задачи.Содержит(ОбъектМетаданных) Тогда Класс = "Задача" Иначе Класс = "" КонецЕсли;

 или изящная

Класс = Объект.Метаданные().ПолноеИмя();
Класс = Лев(Класс, Найти(Класс, ".")-1);

при замере были прогнаны циклы около 27000 итераций и оказалось:
вариант 1: 27345    0,767779    4,49
вариант 2: 27345    0,811876    7,84

Пример для замера прилагается (цикл через перебор справочника ХранилищеДополнительнойИнформации, присутствующего в большинстве типовых конфигураций) 

has been added to your cart:
Оформление заказа