|
Получить объект против ссылки для получения одного реквизита один раз | ☑ | ||
---|---|---|---|---|
0
Ndochp
25.12.13
✎
16:27
|
Задумался, насколько медленнее получить объект по сравнению с получить реквизит из ссылки.
Набросал код для проверки. Оказалось, что объект быстрее, причем значительно (при первом пуске, потом ссылки кэшируются на 20 секунд) То, что ссылка в первый раз не должна быть быстрее объекта это понятно, но почему объект быстрее в три раза? База файловая, на моей 200 ссылки, 65 - объекты. Или я где-то в коде проверки накосячил? Процедура КнопкаВыполнитьНажатие(Кнопка) Выборка2 = Справочники.СотрудникиОрганизаций.Выбрать(); Н3 = ТекущаяУниверсальнаяДатаВМиллисекундах(); Пока Выборка2.Следующий() Цикл цй = Выборка2.ПолучитьОбъект(); цй2 = цй.Наименование; КонецЦикла; Н4 = ТекущаяУниверсальнаяДатаВМиллисекундах(); Выборка = Справочники.СотрудникиОрганизаций.Выбрать(); Н1 = ТекущаяУниверсальнаяДатаВМиллисекундах(); Пока Выборка.Следующий() Цикл йц = Выборка.Ссылка; йц2 = йц.Наименование; КонецЦикла; Н2 = ТекущаяУниверсальнаяДатаВМиллисекундах(); Сообщить("Ссылки " + (Н2-Н1) + " объекты " + (Н4-Н3)); КонецПроцедуры |
|||
1
WildSery
25.12.13
✎
16:47
|
Объект получен "целиком", и чтобы прочитать Наименование, на SQL дополнительно не лезет.
|
|||
2
Maxus43
25.12.13
✎
16:49
|
чтоб получить один реквизит кошернее его Запросом вытаскивать. Но конечо всем лень
|
|||
3
Defender aka LINN
25.12.13
✎
16:52
|
(0) У тебя ж в выборке и так все реквизиты вытаращены. Замени в первом примере на запрос
|
|||
4
palpetrovich
25.12.13
✎
16:59
|
ну да, "йц = Выборка.Ссылка;" - каак-бы лишнее, достаточно йц2 = Выборка.Наименование;
|
|||
5
Ndochp
25.12.13
✎
17:13
|
(1) так выборка одинаковая, получитьОбъект на скуль лезет, сссылка.Наименование на скуль лезет. Почему же разница в три раза?
(2) У меня исходная задача - при начале работы системы, если реквизит не заполнен, то запускаемся первый раз с этим предопределенным элементом справочника, надо заполнить все реквизиты. Вот и возник вопрос, как правильно, получать объект только при заполнении, или всегда, и проверять тоже у него. Вот тут для получения одного реквизита одного элемента мне конечно же надо запрос городить. (3) Я тестированием производительности занимаюсь, а не добычей наименований всех сотрудников. У меня одинаковый код обвязки и отличие только в значимой части. (4) Думается не лишнее. В выборку наименование считанно в момент "Выборка.следующий()" и обращаясь к наименованию из выборки я скорость получения данных из ссылки не замерю. |
|||
6
Fragster
гуру
25.12.13
✎
17:14
|
(2) в типовых накидали функций уже
|
|||
7
Maxus43
25.12.13
✎
17:15
|
>>как правильно, получать объект только при заполнении, или всегда, и проверять тоже у него
даже логически - только при заполнеии. Не надо получать объект, если не собираешся его изменять |
|||
8
Fragster
гуру
25.12.13
✎
17:15
|
а вот почему через СправочникВыборка получение быстрее, кушает меньше памяти и ничего на диск не пишет - вот это вопрос...
|
|||
9
Fragster
гуру
25.12.13
✎
17:16
|
(8)+ вернее вопрос, почему получение через ссылку выполняется в 3 раа дольше и пишет что-то на диск усиленно
|
|||
10
H A D G E H O G s
25.12.13
✎
17:29
|
(9) пишет или читает?
может в кэше ищет. |
|||
11
Fragster
гуру
25.12.13
✎
17:36
|
(10) пишет
|
|||
12
Defender aka LINN
26.12.13
✎
07:59
|
(5) На пальцах: Выборка и так объекты тебе в память читает. Ежу понятно, что получение объекта быстрее будет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |