|
Оптимизировать кусочек кода | ☑ | ||
---|---|---|---|---|
0
r1000
17.06.24
✎
10:05
|
Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(Знч.nom_id));
Если ЗначениеЗаполнено(Номенклатура.Код) Тогда Если Номенклатура.Производитель <> Производитель Тогда Продолжить; КонецЕсли; КонецЕсли; вопрос: произойдет ли повторное чтение данные из таблицы номенклатуры в строке "...Номенклатура.Производитель <> Производитель" ? |
|||
1
Мультук
гуру
17.06.24
✎
10:20
|
(0)
Не будет чтения. 1С умная и умеет в кэш. Это элементарно проверить в замере производительности. Имхо это написано в нужном месте в ИТС. P.S. Что будет если ссылка битая не помню. (лето/жара и т.п.) P.P.S. Что мешает сразу получить оба поля через "ПолучитьЗначенияОбъекта" ? |
|||
2
Повелитель 1С
17.06.24
✎
10:22
|
При вызове Номенклатура.Код содержимое объекта должно закешироваться, повторное чтение не должно произойти.
Но гарантий этого нет. https://its.1c.ru/db/pubdevguide83#content:305:hdoc |
|||
3
АНДР
17.06.24
✎
10:27
|
(0) Если речь не про кеширование, то повторного чтения не будет, т.к. 1С оперирует полными версиями объектов при обращении к ним (происходит чтение всего объекта при первом обращении).
|
|||
4
r1000
17.06.24
✎
10:28
|
что то не очень похоже что есть кэш. "Если ЗначениеЗаполнено(Номенклатура.Код) Тогда" отжирает очень много времени.
|
|||
5
maxab72
17.06.24
✎
10:29
|
Я бы получив ссылку по ПолучитьСсылку()
загнал бы результат в запрос ВЫБРАТЬ Спр.Код КАК Код, Спр.Производитель КАК Производитель ИЗ Справочники.Номенклатура КАК Спр ГДЕ Спр.Ссылка = &Ссылка И тогда если в базе есть эта позиция - результат был бы не пустым, и заодно и нужные значения реквизитов бы получил, не обращаясь ко всем записям экземпляра. |
|||
6
r1000
17.06.24
✎
10:29
|
+(4) на порядки больше чем строка Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(Знч.nom_id));
|
|||
7
lEvGl
гуру
17.06.24
✎
10:32
|
(4) это же первое обращение
(6) и это логично, при получении ссылки вычитывания всего не происходит |
|||
8
АНДР
17.06.24
✎
10:34
|
(6) См. 3. В первой строке ты просто получаешь ссылку на объект. Во второй - 1С создаёт объект в памяти и возвращает тебе его реквизит.
|
|||
9
Повелитель 1С
17.06.24
✎
10:38
|
(4) Именно при этом вызове получается и кешируется весь объект.
Лучше запросом прочитать нужные данные по всем ссылкам сразу. |
|||
10
r1000
17.06.24
✎
11:03
|
дада. попробовал разные варианты, в отладчике все увидел. всем спасибо.
|
|||
11
GANR
17.06.24
✎
11:10
|
(0) Profiler в помощь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |