Имя: Пароль:
1C
 
Кеширование в 1C
,
0 Яплакал
 
21.07.16
10:56
Коллеги вопрос такой, есть модуль повторного использования и ф-я которая на вход получает объект, как 1С определяет что в ф-ю передан повторно такой же объект и значение возвращает из кеша, или для сложных типов 1С всегда будет ф-ю выполнять?
1 Beretta
 
21.07.16
11:06
Вот интересно, что ты делаешь с этой массой времени, освободившимся при пропуске букв в слове "функция"?

По ссылке, по ссылке оно определяет. Если передаешь второй раз ссылку на тот же объект, то вызова не происходит.
2 Яплакал
 
21.07.16
11:08
(1) почему обязательно по ссылке, а если я передам структуру, или набор записей
3 H A D G E H O G s
 
21.07.16
11:12
(2) Как насчет проверки?
4 Beretta
 
21.07.16
11:12
(2) о, дивное юное поколение! Ты про передачу параметров по ссылке и по значению понимаешь?
5 Яплакал
 
21.07.16
13:41
(3) какой проверки, речь о том как платформа отрабатывает
(4) о необразованное бородатое поколение, слышал. Только по ссылки на область памяти не получится объекты сравнивать т.к.я могу тебе сделать пример где в переменных будет один и тот же объект, но ссылки будут указывать на разные участки памяти. Например в шарпе приходилось писать метод расширения который подсчитывал бы шех переданного объекта что бы как-то можно было сравнивать, даже стандартный метод ObjectHash (или как-то так уже не помню) не подходил. Вот мне и стало любопытно как платформа ведет себя в таких случаях.
В дагонку (4), ты попробуй создать соответствие где ключом будет структура и поюзай ее, у тебя никогда такая фигня корректно работать не будет, вот тебе и "по ссылке", иди опыта набирайся.

И того вопрос другим более опытным людям, кто-то может читал или личный опыт имел, будет ли корректно работать кеширование в 1С если входящие параметры сложная структура?
6 Яплакал
 
21.07.16
13:42
(5) рассчитывал* хеш
7 Яплакал
 
21.07.16
14:20
Вот кстати и ответ

{ОбщийМодуль.МодульЁпта.Модуль(63)}: Ошибка при вызове метода контекста (ЭтоПростойТип)
      Если Не БФТ_ПараметрыВнешнихСистемСерверПовтИсп.ЭтоПростойТип(ТипЗнч(ТекущиеДанные.Значение)) Тогда
по причине:
Несоответствие типов (параметр номер '1') (Неверный тип параметра. Допустимы только примитивные типы, ссылки, Структура)

Если ф-я в модуле повторного исп. 1С контролирует входящие параметры
8 H A D G E H O G s
 
21.07.16
14:24
(7) Ну вот ты и проверил.
9 Mauser
 
21.07.16
17:33
5) Вы, сишарпеи и дотнетчики, чесслово, упороторые какие-то. особенно когда начинающие.

    Ключ1 = Новый Структура("Поле", 1);
    Ключ2 = Новый Структура("Поле", 2);
    
    Тест = Новый Соответствие;
    Тест[Ключ1] = "Значение 1";
    Тест[Ключ2] = "Значение 2";
    
    Сообщить(Тест[Ключ2]);
    Сообщить(Тест[Ключ1]);


Весьма корректно работает
10 Mauser
 
21.07.16
17:36
1C Сравнивает экземпляры объектов по ссылкам на них. А влажные фантазии про хеши и глубокое копирование - это тебе к @Serginio
11 Serginio1
 
21.07.16
17:41
Как слово C# услышали так сразу Serginio
Изучайте http://metanit.com/sharp/tutorial/
12 Mauser
 
21.07.16
17:42
Устойчивая ассоциация, сам виноват.
13 aleks_default
 
21.07.16
17:46
(12) +1 И не самая плохая :)
14 Serginio1
 
21.07.16
17:46
(12) У меня устойчивая ассоциация с Хэйслсбергом. Так, посылайте всех к нему.
15 Mauser
 
21.07.16
17:52
(14) Неси бремя славы с достоинством, слабак!
16 Serginio1
 
21.07.16
17:54
(15) Если хочешь отослать, то лучше отсылать на ресурсы как в 11. Будет польза от советов.
17 Serginio1
 
21.07.16
17:54
(13) Спасибо!
18 jsmith
 
21.07.16
17:58
Дот нет форева
19 Mauser
 
21.07.16
18:22
20 Mauser
 
21.07.16
18:25
21 Mauser
 
21.07.16
18:25
Эх, миста-миста... FreeBSD и то уже давно в уникод умеет
22 Garykom
 
гуру
21.07.16
18:32
Писать систему хранения со сжатием на основе повторяющихся объектов в 1С это сильно...

В C#
Объект.Equals(Объект.Clone()) == ?
23 Garykom
 
гуру
21.07.16
18:34
(22)+ А банальное это сериализовать и сравнить как строки/массив байт, но если поля тоже ссылочных то хз даже