Каталог решений - ТипЗнч vs Метаданные()

Описание

Периодически приходится делать ветвление в модуле в зависимости от  типа переданного объекта. С учетом возможности получения объекта как объектом так и ссылкой это вырастает в некрасивые

Если ТипЗнч(Основание) = Тип("ДокументСсылка.Документ1")
или ТипЗнч(Основание) = Тип("ДокументОбъект.Документ1") Тогда

В поисках красивого кода и оптимизации решил замерить, что лучше — ТипЗнч или Метаданные — ведь для метаданных сравнений меньше — метаданные одинаковы как у ссылки, так и у объекта.

 

Простой модуль (лентяи могут скачать обработку):

Процедура КнопкаВыполнитьНажатие(Кнопка)
	//массив имен справочников
	МасМД = Новый Массив;
	Для Каждого мдСпр из Метаданные.Справочники Цикл
		МасМД.Добавить(мдСпр.Имя)
	КонецЦикла;
	
	// проверочный объект и его трансформации
	Объект = Справочники[МасМД[0]].ПустаяСсылка();
	МД = Объект.Метаданные();
	ТипОб = ТипЗнч(Объект);
	
	// цикл по метаданным
	Сообщить(ТекущаяДата()+" 1");
	Для Каждого мдСпр из МасМД Цикл
		Если МД = Метаданные.Справочники[мдСпр] Тогда
			а = "Да"
		Иначе
			а = "Нет"
		КонецЕсли;
	КонецЦикла;
	Сообщить(ТекущаяДата()+" 2");
	
	// цикл по типам
	Сообщить(ТекущаяДата()+" 3");
	Для Каждого мдСпр из МасМД Цикл
		Если ТипОб = Тип("СправочникОбъект."+мдСпр) или ТипОб = Тип("СправочникСсылка."+мдСпр) Тогда
			а = "Да"
		Иначе
			а = "Нет"
		КонецЕсли;
	КонецЦикла;
	Сообщить(ТекущаяДата()+" 4");
	
КонецПроцедуры

В результате получилось что получение метаданных медленее на порядок-два. И хотя речь о долях секунд, но всё равно увы…
Проверял на 8.1 и на 8.2

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