|   |   | 
| 
 | Получить объект против ссылки для получения одного реквизита один раз | ☑ | ||
|---|---|---|---|---|
| 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) На пальцах: Выборка и так объекты тебе в память читает. Ежу понятно, что получение объекта быстрее будет.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |