gifts2017

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

Опубликовал Виктор Клевцов (taiba) в раздел Программирование - Практика программирования

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

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

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

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

 или изящная

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

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

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

Скачать файлы

Наименование Файл Версия Размер
Обработка для проверки 3
.epf 6,55Kb
08.08.13
3
.epf 6,55Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Ожерельев (Поручик) 08.08.13 16:20
(0) Да, а что? Метаданные() довольно тормозной метод, давно известно.
3. Виктор Клевцов (taiba) 08.08.13 16:27
(1) Поручик, собственно продолжаю обосновывать фактами стандарты :)
4. Дмитрий Шерстобитов (DitriX) 09.08.13 09:32
(3) вы извините, но это никак не факты.
Фактами оно было бы, если бы взяли разных 10 платформ, базы в файловом режиме и клиент серверном (не забываем про разные версии СУБД), делали замеры через каждый час, и все это длилось в среднем - сутки.
Вот тогда бы это все имело право на жизнь, а так...
5. Виктор Клевцов (taiba) 09.08.13 10:31
(4) DitriX, я честно написал, что данные по 8.1, почему вас это не устраивает? Хотите массовое исследование - делайте, если позволяют ресурсы. Я лишь ПОДТВЕРДИЛ рекомендации 1С в конкретном варианте. Не думаю, что другие варианты поменяют ситуацию на противоположную - стандарт разработки-то не менялся.

Почему при отсутствии темы ВООБЩЕ вы ставите мне минус за частичное "рассеивание тьмы"? Я вам ведь ничего не должен.
6. Дмитрий Шерстобитов (DitriX) 09.08.13 11:54
(5) давайте тогда каждый начнет выкладывать вот такого рода обрезанную информацию, где в частном случае, подтверждается что-то.
Просто такую инфу, как мне кажется, надо выкладывать в своем блоге (такое есть на инфостарте).
А вот если вы говорите о чем то, что должно заинтересовать некую часть людей (я не говорю даже о 1% посетителей ресурса, хотя бы 0,001%), то это можно и публиковать.
А так - это похоже на желтую прессу. Т.е. вы взяли заведомо некое правильное утверждение, рассмотрели его в частном случае, сделали вывод - что оно истинно.
Извините, но если бы такую статью написал чебуратор, алексис, или ежи с ними, то я бы видел смысл в этой статье, так как люди заслужившие уважение - сделали свое заключение.

А вообще, это вам не соц сеть, где надо обижаться на минуса и лепить свои в ответ.
Давайте почитаем - что рядом с оценкой написано:
Поставьте плюс, если вы рекомендуете данную публикацию к прочтению и использованию.
Вы понимаете что это значит? Я растолкую - это значит, что я не рекомендую эту публикацию остальным людям.
Для вас это значит - что надо лучше собирать информацию, думать перед публикацией, и развивать свои навыки.

А не кричать - АААААА, Вы мне минус поставили, ахтунг, я тебе ничего не сделал и бла бла бла.
Еще раз - такие статьи - во вконтактик пилите, а если пишете тут - будьте добры не плакать за оценки.

Если вы дополните статью какими либо сведениями, я изменю оценку.


Надеюсь я развернуто ответил?
7. Виктор Клевцов (taiba) 09.08.13 12:17
(6) DitriX, Вы ошибаетесь в том, что мой минус был "актом возмездия". Я считаю ваши требования завышенными. У меня нет ни технического ресурса, ни временного, чтобы поставить десяток платформ и субд и провести массовое исследование. Полагаю, что у многих тоже его нет. Поэтому я делюсь тем, что мне доступно. Именно вашей категоричности "Вот тогда бы это все имело право на жизнь, а так" я и поставил минус.

Если вы проведёте подобное исследование и поделитесь результатами (пример обработки я дал), я буду только рад опубликовать их в статье со ссылкой на вас.

Я не требую, чтобы все читатели ринулись со слезами благодарности ставить плюсы моей публикации. Я сделал для себя мини-исследование и выбрал лучшую технологию. Однако не считаю её бесполезной - для указанной платформы она вполне адекватно описывает положение дел. Про ведение блогов здесь - не знал, но непонятен ваш критерий отнесения информации к блогу или к публикации.
8. Вадим Никонов (V.Nikonov) 15.08.13 21:28
(6) DitriX, Действительно, минуса стоит ставить за ВРЕДНЫЕ статьи.