Имя: Пароль:
1C
1С v8
Повторно-возвращаемые значения.
,
0 H A D G E H O G s
 
19.02.14
14:57
День добрый.

Хочу функцию вида

Функция ЕстьТабЧастьДокумента(ИмяТабЧасти, МетаданныеДокумента) Экспорт

    Если МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти) = Неопределено Тогда
        Возврат Ложь;
    Иначе
        Возврат Истина;
    КонецЕсли;

КонецФункции // ЕстьТабЧастьДокумента()


вынести в модуль повторно-возвращаемых значений.

Вопрос - насколько будет тяжел ключ поиска для объекта МетаданныеДокумента, составленный платформой.

Ваши мнения?
1 Адский плющ
 
19.02.14
15:00
Вероятнее всего док будет проводится быстрее на 0.001%. Лютая оптимизация.
2 H A D G E H O G s
 
19.02.14
15:02
(1) Там тяжко все. Много таких вызовов. Хочется оптимизации.
3 Ненавижу 1С
 
гуру
19.02.14
15:03
Функция ЕстьТабЧастьДокумента(ИмяТабЧасти, МетаданныеДокумента) Экспорт

    Возврат МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти)<>Неопределено;

КонецФункции
4 H A D G E H O G s
 
19.02.14
15:04
(3) следующий!
5 Feunoir
 
19.02.14
15:05
(0) Передавай не метаданные, а имя документа.
6 Жан Пердежон
 
19.02.14
15:06
строкой сделай второй параметр
7 H A D G E H O G s
 
19.02.14
15:06
(5) Классно!
8 H A D G E H O G s
 
19.02.14
15:07
Как вариант - да.
Ну а все таки, есть мысли насчет Метаданных?
9 Feunoir
 
19.02.14
15:09
(8) Я думаю, что только разработчики платформы тебе скажут. Или сравнительное тестирование.
10 Asmody
 
19.02.14
15:12
(8) да хер его знает, как оно там внутри реализовано. Метаданные ведь не объектом передаются (скорее всего), так что какой-то хеш там есть.
11 Asmody
 
19.02.14
15:14
другое дело, как они с этим хешем поступают, когда вычисляют параметр. насчёт "ленивости" языка ничего не известно, так что можно только гадать. или нарисовать тест на миллиард вызовов и замерить
12 1Сергей
 
19.02.14
15:14
Эм... объясните мне, тупому, что такое "модуль повторно-возвращаемых значений"
13 H A D G E H O G s
 
19.02.14
15:17
(12) ОМ, который кэширует результат выполнения функции с одинаковыми значениями параметров
14 ДенисЧ
 
19.02.14
15:17
(12) Модуль кеширует результаты функций
15 1Сергей
 
19.02.14
15:18
(13) (14) спасибо, примерно понял. Это появилось в 8.2?
16 H A D G E H O G s
 
19.02.14
15:18
да
17 1Сергей
 
19.02.14
15:19
спс
18 Feunoir
 
19.02.14
15:27
(8) Ну вот так как-то
{ОбщаяКоманда.ОбщаяКоманда1.МодульКоманды(11)}: Ошибка при вызове метода контекста (ЕстьТабЧастьДокумента_Мета)
        Зн = ТестКонтекста.ЕстьТабЧастьДокумента_Мета("Товары", МетаДок);
по причине:
Несоответствие типов (параметр номер '2') (Неверный тип параметра. Допустимы только примитивные типы, ссылки, Структура)
19 H A D G E H O G s
 
19.02.14
15:36
Фух. Надо было сначало мне ткнуть ее (1С), а потом писать.
20 Feunoir
 
19.02.14
15:38
(19) А вообще вот результаты: http://i.imgur.com/XPo7uGO.png
замер 1 с включенным кешированием, замер 3 - без кеширования. В конфигурации 2 документа у проверяемого документа 1 табличная часть.
21 1Сергей
 
19.02.14
15:39
(19) не переживай. тут все сперва бегут на мисту, а потом только в конфигуратор )
22 Feunoir
 
19.02.14
15:41
(21) Неправда. Не все :) И не всегда
23 1Сергей
 
19.02.14
15:43
(20) нипанятна
так с повторно-возвращаемыми значениями быстрее или нет?
24 Asmody
 
19.02.14
15:44
(20) так у тебя файловый вариант
25 Feunoir
 
19.02.14
15:47
(23) Почти вдвое. 1,6 секунды против 3,1 секунды.

(24) А какая разница? Думаешь сервер пропустит в повторно-вызываемых какие-то другие типы данных?
26 Jaap Vduul
 
19.02.14
16:19
(25)
Видимо, в (24) имелось в виду, что в случае клиент-серверной базы результаты замера будут другие.

Вообще, ИМХО, имеет смысл кэшировать те результаты, за которыми приходится в СУБД лезть.

В случае же (0), полагаю, вообще никакого выигрыша не будет, а наоборот.
27 H A D G E H O G s
 
19.02.14
16:20
(26) "
Вообще, ИМХО, имеет смысл кэшировать те результаты, за которыми приходится в СУБД лезть. "

да, вы правы. Я - погорячился.