Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
У вас еще и блокировка ляжет на объект....
А при такой реализации произойдет грязное чтение, которому пофиг на блокировку. Да и по скорости большой разницы не будет
Согласен с напрасным наездом... Код этот надобно в отдельную функцию, да отрефакторить, это да... Но идея лучше, чем получение через точку. Со скулем работал три года в плотном режиме, потому про блокировки знаю не по наслышке.
Вы чего, ребята? Разве при обращении к ссылке, типа: ЭлементыФормы.Товары.ТекущаяСтрока.Номен клатура - она не кэшируется, и не выполняется тот же запрос? Кэшируется и выполняется.
Эдак, давайте, налепим сюда ещё проверку на количество выборки, на существование колонки "ЕдИзм" и прочего говна. А что, по скорости большой разницы не будет.
Кстати, что выдаст этот код, если номенклатура окажется пустой ссылкой?
В общем, не стоит мудрить, когда это того не стоит. В 90% случаев, через жопу получается только хуже.
ТекущаяСтрока.Номенклатура хранится в уже полученном объекте в памяти сервера 1С.
ТекущаяСтрока.Номенклатура.ЕдиницаИзмере ния - это запрос к БД с получением объекта в память, со всеми его реквизитами.
То, как сделано - получение только ссылки.
Более короткий код не всегда эффективнее. Кто сомневается - пузырьковая сортировка против например Quicksort Чарльза Хоара.
Обращение к ссылке через точку тоже ведет к созданию запроса. Просто его платформа неявно выполняет, может получиться и чуть быстрее, но не намного. Я имею в виду создание самого объекта Запрос, а не его выполнение.
А тянуть единственный мне нужный реквизит запросом - имеет смысл. Потому что платформа-то потянет все реквизиты.
В итоге проиграем 10 нс, а выиграем 1 мс и трафик и нагрузку на скуль.
Выберет, но не отправит. Отправить одно поле или все - нагрузка на сеть для особо крупных объектов в тысячи раз отличается.
А сеть, насколько я знаю, самый медленный элемент в цепи HDD/Память/Процессор/Сеть
Не стоит путать latency (задержку) и throughput (пропускную способность).
Один пакет на 10 байт и один пакет на килобайт будут идти примерно одинаково. В общем-то, даже два-три пакета подряд будут идти чуть-чуть дольше, чем только один первый.
З.Ы. Но если эта ваша платформа вытягивает поля по одному, а не пачкой - тогда да, запрос всего объекта будет лагать как говно.
guest # 0
Kopchuga # 0
...
ед = выборка1.единицаизмерения.ссылка;
...
И всё это положить в "ПриВыводеСтроки".
guest # 0
Сравните, что будет в скуле, когда напишите так:
У вас еще и блокировка ляжет на объект....
А при такой реализации произойдет грязное чтение, которому пофиг на блокировку. Да и по скорости большой разницы не будет
Трактор # 0 ⇈
guest # 0
Kopchuga # 0 ⇈
Эдак, давайте, налепим сюда ещё проверку на количество выборки, на существование колонки "ЕдИзм" и прочего говна. А что, по скорости большой разницы не будет.
Кстати, что выдаст этот код, если номенклатура окажется пустой ссылкой?
В общем, не стоит мудрить, когда это того не стоит. В 90% случаев, через жопу получается только хуже.
guest # 0 ⇈
ТекущаяСтрока.Номенклатура.ЕдиницаИзмере ния - это запрос к БД с получением объекта в память, со всеми его реквизитами.
То, как сделано - получение только ссылки.
Более короткий код не всегда эффективнее. Кто сомневается - пузырьковая сортировка против например Quicksort Чарльза Хоара.
guest # 0
mrbus # 0 ⇈
А тянуть единственный мне нужный реквизит запросом - имеет смысл. Потому что платформа-то потянет все реквизиты.
В итоге проиграем 10 нс, а выиграем 1 мс и трафик и нагрузку на скуль.
grandatlant # 0 ⇈
mrbus # 0 ⇈
А сеть, насколько я знаю, самый медленный элемент в цепи HDD/Память/Процессор/Сеть
bormand # 0 ⇈
Один пакет на 10 байт и один пакет на килобайт будут идти примерно одинаково. В общем-то, даже два-три пакета подряд будут идти чуть-чуть дольше, чем только один первый.
З.Ы. Но если эта ваша платформа вытягивает поля по одному, а не пачкой - тогда да, запрос всего объекта будет лагать как говно.
barop # 0 ⇈
bormand # 0 ⇈
barop # 0 ⇈
никак
huesto # 0 ⇈
guest # 0
Единственное, что нужно было сделать - вызвать стандартную функцию БСП ЗначениеРеквизитаОбъекта, а не лепить свою.