|
Оптимизировать кусочек кода |
☑ |
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 в помощь
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший