![]() |
1 2 ► |
|
| |||||||||
Гений 1С 24.10.08 - 11:10 |
Причем этим кэшированием можно управлять, кэшируемые функции нужно выносить в специальные модули.
Правда кэш она хранит пять минут только в случае бездействия, это плохо. Но т.к. нет глобальных серверных переменных, такая хрень достаточно полезна... Интересно, чего там еще такого есть, скрытого! | |||||||||
ТелепатБот 1 - 24.10.08 - 11:10 | ||||||||||
mikecool 2 - 24.10.08 - 11:12 | (0) ссылку на описание | |||||||||
Гений 1С 3 - 24.10.08 - 11:16 | (2) Нету ссылки. Мне сказали... | |||||||||
Гений 1С 4 - 24.10.08 - 11:16 | Т.е. типо если Ф(А,Б,В) то в следующий раз Ф(А,Б,В) не вычисляется, а возвращается ранее вычисленный результат. Без изменения кода можно увеличивать производительность. | |||||||||
ДенисЧ 5 - 24.10.08 - 11:17 | А если в этой Ф() считаются остатки по регистрам? Тоже кешируется? | |||||||||
ДенисЧ 6 - 24.10.08 - 11:17 | ЗЫ. "гитик" пишется через И :-) | |||||||||
ОчкарикСлава 7 - 24.10.08 - 11:22 | Много чего кэшируется, описано в практич. пособии разработчика, читал гдето когдато... | |||||||||
Rovan 8 - 24.10.08 - 11:22 | (+5) или ищется некий элемент(ы) справочника (по фильтру) или документ по номеру :-) | |||||||||
Rovan 9 - 24.10.08 - 11:25 | (7) недано обсуждали про кеширование объектов (документ, справочник) | |||||||||
IamAlexy 10 - 24.10.08 - 11:26 | а еще 8ка бизнеспроцессы умеет... много бизнеспроцессов в типовых? :) | |||||||||
nop 11 - 24.10.08 - 11:27 | (0) Что значит "кэшировать функции" ?? Результат функции кэшировать очень сложно. Кэшируется код? Вот это полезность, так полезность... | |||||||||
IamAlexy 12 - 24.10.08 - 11:29 | вопрос в том что есть кеширование функции.. если значение какоелибо то нафига его кешировать если можно в переменную записать. если объект - то чем это отличается от кеширования объектов??? соответственно функция вызывается тогда когда нужно именно что то новое получить... все старье в переменных... накой фиг ее кешировать то? :) | |||||||||
H A D G E H O G s 13 - 24.10.08 - 11:32 | (3) Мне вчера сказали, что всех Гениев 1C, а также Гениев 1АБ, и также Гениев 18+ отправляют на Байкал омуля добывать.. Ссылку привести тоже не могу. | |||||||||
Rovan 14 - 24.10.08 - 11:35 | (11) как это Кэшируется код?
код в смысле 1С.exe ? - за это мс вынь отвечает или код в конфа ? - дык она в пять грузится вся | |||||||||
nop 15 - 24.10.08 - 11:36 | Тема кэша не раскрыта ... | |||||||||
Гений 1С 16 - 24.10.08 - 11:39 | (2) к тому же где ты видел документацию по 1с в онлайне? только в книжках. гыгыгы | |||||||||
Гений 1С 17 - 24.10.08 - 11:40 | (5) А нефиг такую функцию вызывать для остатков по регистрам. Кешируется по параметрам, т.е. по сигнатуре параметров | |||||||||
Jolly Roger 18 - 24.10.08 - 11:40 | Чо за бред? | |||||||||
Гений 1С 19 - 24.10.08 - 11:40 | (7) Да, но теперь этим можно управлять. | |||||||||
Гений 1С 20 - 24.10.08 - 11:41 | (11) кури 4-й пост | |||||||||
ДенисЧ 21 - 24.10.08 - 11:41 | (17) Не 1су решать, что и когда мне вызывать. | |||||||||
i-rek 22 - 24.10.08 - 11:41 | не может быть.
Если б это было так, оборотка запускалась бы первый раз долго, второй раз мгновенно. Этого не происходит )) | |||||||||
Господин ПЖ 23 - 24.10.08 - 11:45 | эээ... нафига вызывать Ф(А,Б,В) несколько раз подряд... | |||||||||
IamAlexy 24 - 24.10.08 - 11:46 | (20) но ведь в(4) это же бред. над вами прикололись а вы повелись? если мне нужно результат Ф(а,б,с) использовать повторно то я сделаю так: результат=ф(а,б,с);ну и дальше буду играться с переменной "результат". а когда мне потребуется обновить значение переменной я повторно вызову функцию результатОбновленный=ф(а,б,с);нафига мне КЕШИРОВАТЬ РЕЗУЛЬТАТ РАБОТЫ ФУНКЦИИ???? | |||||||||
Гений 1С 25 - 24.10.08 - 11:48 | ну например если у тебя есть функция Ф(А,Б), ты ее вызываешь Ф(Пользователь Петров, ОсновнаяВалюта) = Доллары, то в следующий раз когда ты вызовешь Ф(Пользователь Петров, ОсновнаяВалюта), она вернет Доллары, не вычисляя.
А вот если ты спросишь Ф(Пользователь Иванов, ОсновнаяВалюта) или Ф(Пользователь Петров, ОсновнойСклад), она опять будет вычислять. | |||||||||
Гений 1С 26 - 24.10.08 - 11:49 | (24) дятел, это для автоматического разруливания таких случаев:
Функция Х() результат=ф(а,б,с); Возврат Результат; КонецФункции Для Инд = 1 по 100000 Цикл Сообщить(Х); КонецЦикла; | |||||||||
Гений 1С 27 - 24.10.08 - 11:49 | (24) чтобы не хешировать ручками... | |||||||||
Господин ПЖ 28 - 24.10.08 - 11:49 | Фиксин, а ты скульный кэш с кэшом 1С не путаешь? | |||||||||
Гений 1С 29 - 24.10.08 - 11:50 | (22) так это надо еще прикручивать... к тому же для оборотки это юзать бессмысленно. ;-)
Не знаю, есть у них функция очистки кэша? вообще как обычно в 1с бывает, первые версии кривые и "нязграбныя", как говорят в белоруси | |||||||||
Гений 1С 30 - 24.10.08 - 11:50 | (28) нет, батенька Рекламное место пустует | |||||||||
IamAlexy 31 - 24.10.08 - 11:50 | (26) неудачный пример. что мешает разрулить так: результат=ф(а,б,с); Для Инд = 1 по 100000 Цикл Сообщить результат; КонецЦикла; | |||||||||
Гений 1С 32 - 24.10.08 - 11:50 | на партнерском была ветка, я там прочитал | |||||||||
Гений 1С 33 - 24.10.08 - 11:51 | (31) ну ты тормоз... я тебе идиотский пример специально привел. Кэш используется, когда ты не знаешь, из каких мест кода будет вызываться функция, но знаешь, что можно захешировать результат на все время жизни сеанса, например | |||||||||
Господин ПЖ 34 - 24.10.08 - 11:51 | ||||||||||
Гений 1С 35 - 24.10.08 - 11:53 | (34) извини, описался | |||||||||
Гений 1С 36 - 24.10.08 - 11:54 | так вот, для алексия еще пример.
Допустим ты считал настройку пользователя функцией НастройкаПользователя("ОсновнаяВалюта"). Чтобы в след раз не дергать регистр, функция хешируется. Можно конечно все настройки занести в глоб переменную, но тогда мы тратим лишнее время на чтение тех настроек, которые не нужны. Можно эмулировать кэш, но в данном случае все происходит на автомате. | |||||||||
nop 37 - 24.10.08 - 11:55 | (20) А если функция содержит чтение из БД? | |||||||||
IamAlexy 38 - 24.10.08 - 11:55 | ||||||||||
H A D G E H O G s 39 - 24.10.08 - 11:56 | (0) Счаст мы тебя проверим... | |||||||||
Гений 1С 40 - 24.10.08 - 11:57 | (37) иногда имеет смысл кэшировать, например те же настройки пользователя. А если БД поменялась, можно сбросить кэш. Правда 1сники сбрасывают кэш целиком, мазафакеры. | |||||||||
Гений 1С 41 - 24.10.08 - 11:57 | (38) 1с не рекомендует использовать много параметров сеанса. Это раз, во вторых тогда кэширование придется ручками прописывать | |||||||||
SilentMan 42 - 24.10.08 - 11:58 | ||||||||||
Гений 1С 43 - 24.10.08 - 11:58 | Вот тебе живой пример.
Я использую конвертацию одних проводок в другие. Для каждого счета я получаю список правил конвертацией функцией СписокПравилКонвертации(Сч). Так вот, я могу конечно составить соответствие и проверять, вычислял я уже список правил или нет, а могу тупо закэшировать результат функции. | |||||||||
Регистратор 44 - 24.10.08 - 11:59 | похоже что в 1с занятья более нечем, лучшебы память у них на сервере не утекала | |||||||||
Гений 1С 45 - 24.10.08 - 11:59 | (42) Точно?
Дело как было? я подумал, что неплохо было бы кэшировать, выдвинул тему на партнерском, а мне ответили, что это уже работает. ;-) | |||||||||
Гений 1С 46 - 24.10.08 - 11:59 | (44) плохому танцору | |||||||||
IamAlexy 47 - 24.10.08 - 12:00 | хм.. честно говоря рациональное зерно есть но по сути это пушки по воробьям.. чо то мне сложно придумать что то более серьезное с кешем функции чем настройки пользователя которые можно во первых хранить в параметрах сеанса ибо их как правило немного... а париться с кешем ради того чтобы лишний раз не прочитать основную валюту пользователя - имхо бессмысленно совершенно... | |||||||||
SilentMan 48 - 24.10.08 - 12:00 | (45) При этом ты настолько ослеп, что раздел форума (куда тебя послали) прочитать не смог ... | |||||||||
H A D G E H O G s 49 - 24.10.08 - 12:02 | Функция Тест(Параметр) Рез=0; Для i=1 По Параметр Цикл Рез=Рез+i; КонецЦикла; Возврат Рез; КонецФункции Процедура ОсновныеДействияФормыТест(Кнопка) Результат=Тест(100000); Результат=Тест(100000); Результат=Тест(100000); Результат=Тест(100000); КонецПроцедуры | |||||||||
ДенисЧ 50 - 24.10.08 - 12:02 | А давайте гению на титан сбросимся... И лес целее будет, и строителям поможем... | |||||||||
H A D G E H O G s 51 - 24.10.08 - 12:05 | Проценты:
25,95 24,73 24,66 24,65 | |||||||||
Гений 1С 52 - 24.10.08 - 12:06 | (47) Ты просто мало занимался ускорением... Тебе простительно. | |||||||||
H A D G E H O G s 53 - 24.10.08 - 12:06 | (51) Ну да, тренд идет вниз :-) | |||||||||
Гений 1С 54 - 24.10.08 - 12:07 | (49) Ты не включил кэширование, ежик | |||||||||
Регистратор 55 - 24.10.08 - 12:09 | Да достижение офигеть тормознутость своего интепретатора 1с пытается лечить кешированием результатов выполнения функций не обращающихся к данным :))) | |||||||||
H A D G E H O G s 56 - 24.10.08 - 12:11 | (54)
1) Дмитрий, Дмитрий Сергеевич, Дима, Димочка, Димон, Димыч и даже Hadgehogs, но не как не ежик. Сергей, постарайся это понять и запомнить. Это совет. 2) Как мне включить это чудо - кэширование? | |||||||||
Jolly Roger 57 - 24.10.08 - 12:14 | (56) Кэширование результатов функций доступно только Гениям... | |||||||||
H A D G E H O G s 58 - 24.10.08 - 12:15 | (57) Тоесть, я - не айс? | |||||||||
Гений 1С 59 - 24.10.08 - 12:20 | (58) Спили мушку, включи кэширование... Кэширование автоматом не происходит. Функция должна быть в общем модуле, допускающем кэширование | |||||||||
H A D G E H O G s 60 - 24.10.08 - 12:21 | (59) Айн момент.. Рекламное место пустует | |||||||||
MSensey 61 - 24.10.08 - 12:23 | Гений, у тебя в последнее время какое-то обострение.
Отдохни чуток ps (0) в 8.2 реализован | |||||||||
Гений 1С 62 - 24.10.08 - 12:23 | (60) в 8.2. тестируй, лана? | |||||||||
Гений 1С 63 - 24.10.08 - 12:24 | (61) тебя напрягает? если да, то чем? если нет, то фигли? | |||||||||
H A D G E H O G s 64 - 24.10.08 - 12:27 | (63) Гений, из тебя бы вышел показательный (знаковый) пользователь..
<<Сегодня только узнал что 1С81 умеет кэшировать>> <<в 8.2. тестируй, лана?>> Это нормально.. | |||||||||
Господин ПЖ 65 - 24.10.08 - 12:30 | эээ... так речь про 8.1 или 8.2 все таки? | |||||||||
trdm 66 - 24.10.08 - 12:31 | Совершенно тупая, затратная и ненужная фигня. Лучше бы ресурс тратили на более умные вещи.. | |||||||||
MSensey 67 - 24.10.08 - 12:32 | (63) Я тебе говорю взгляд со стороны, бывает что человек не замечает своей "болезни" | |||||||||
H A D G E H O G s 68 - 24.10.08 - 12:32 | (0) А если в расчете участвуют глобальные переменные, которые передаются не через параметры функции. И между вызовами они изменились. 1С это учтет?. | |||||||||
NULLL 69 - 24.10.08 - 12:33 | (61) Где сохранается кеш? Если на сервере - то он может не обновлятся и неделями. | |||||||||
Гений 1С 70 - 24.10.08 - 12:38 | (66) Не, борис, ты не прав, надо уметь готовить. У меня документ грузился 30 минут, после кеширования (правда ручками написал) - 3 минуты... А тут можно чисто автоматизировать без ручек. | |||||||||
Гений 1С 71 - 24.10.08 - 12:39 | (67) Ты видел хоть одного психа, осознавшего, что он псих. Смысл твоих усилий? | |||||||||
Гений 1С 72 - 24.10.08 - 12:39 | (68) функции хэшируются не по ссылке, а по значению параметров, если ты этого еще не понял | |||||||||
Дерево 73 - 24.10.08 - 12:40 | ||||||||||
MSensey 74 - 24.10.08 - 12:40 | (71) клятва гепократа | |||||||||
Гений 1С 75 - 24.10.08 - 12:40 | (68) А, я понял о чем ты. Ты кэшируемые функции пишешь сам, поэтому ответственность за их код на тебе. Не юзай глобальные (волитарные) переменные в коде кэшируемых функций. Для того чтобы юзать кеш, не любая функция годится | |||||||||
Гений 1С 76 - 24.10.08 - 12:40 | (73) чем делиться? | |||||||||
MSensey 77 - 24.10.08 - 12:41 | (72) "хэшируются" - Гений не наступай на теже грабли второй раз | |||||||||
Дерево 78 - 24.10.08 - 12:45 | ||||||||||
Гений 1С 79 - 24.10.08 - 12:46 | я проанализировал ход выполнения кода, обнаружил, где она больше всего жрет времени, вынес это в кэши, например:
Кэширование поиска значений по ключу: КэшПоискЗначений = П.Кэши.ПоискЗначений[ВидСубконтоУУ];
Если КэшПоискЗначений = Неопределено Тогда
КэшПоискЗначений = Новый Соответствие();
П.Кэши.ПоискЗначений.Вставить(ВидСубконтоУУ, КэшПоискЗначений);
КонецЕсли;
...
КэшПоискЗначений.Вставить(РезКодПоиска, ?(Результат = Неопределено, NULL, Результат));
Запрос создаю только один раз, а не в цикле, т.е. не тратится время на его компиляцию:
З = П.Кэши.ЗапросПоСоздаваемымОбъектам;
З.УстановитьПараметр("ИдВнешний", РезКодПоиска);
Р = З.Выполнить().Выбрать();
Если Р.Следующий() Тогда
Результат = Р.Объект;
Перейти ~КонецАлг;
КонецЕсли;
Кэширование обращения к метаданным:
Если СокрЛП(ВидСубконтоУУ.ИмяРеквизитаПоиска)<>"" Тогда РеквизитПоиска = СокрЛП(ВидСубконтоУУ.ИмяРеквизитаПоиска); Иначе Если НЕ П.Кэши.НаличиеРеквизита.Свойство(ВидСубконтоУУ.Имя+"_"+"ИдВнешний") Тогда П.Кэши.НаличиеРеквизита.Вставить(ВидСубконтоУУ.Имя+"_"+"ИдВнешний", Метаданные.Справочники[ВидСубконтоУУ.Имя].Реквизиты.Найти("ИдВнешний") <> Неопределено); КонецЕсли; Если П.Кэши.НаличиеРеквизита[ВидСубконтоУУ.Имя+"_"+"ИдВнешний"] Тогда РеквизитПоиска = "ИдВнешний"; Иначе Если НЕ П.Кэши.НаличиеРеквизита.Свойство(ВидСубконтоУУ.Имя+"_"+"Код6") Тогда П.Кэши.НаличиеРеквизита.Вставить(ВидСубконтоУУ.Имя+"_"+"Код6", Метаданные.Справочники[ВидСубконтоУУ.Имя].Реквизиты.Найти("Код6") <> Неопределено); КонецЕсли; Если П.Кэши.НаличиеРеквизита[ВидСубконтоУУ.Имя+"_"+"Код6"] Тогда РеквизитПоиска = "Код6"; Иначе П.Вставить("РезКодПоиска", "Не определен реквизит для поиска в справочнике"); П.ОписаниеОшибкиПоиска = "Не определен реквизит для поиска в справочнике. "; Перейти ~КонецАлг;//Искать не по чем КонецЕсли; КонецЕсли; КонецЕсли; Ну и еще много других мест. Все это дало прирост производительности в 10 раз. ;-) Но можно было бы юзать кэши 1с, если бы она это сделала нормально, а не как всегда. | |||||||||
Дерево 80 - 24.10.08 - 12:46 | что-то мне вспомнился один земляк пристававший со словами: "Хэша хапнуть хочешь?" | |||||||||
Гений 1С 81 - 24.10.08 - 12:46 | ||||||||||
H A D G E H O G s 82 - 24.10.08 - 12:47 | (77) Не придерайтесь к словам.
А вообще приблуда бесполезная, имеющая смысл только для ленивых/забывчивых/студентов. | |||||||||
Гений 1С 83 - 24.10.08 - 12:48 | ||||||||||
Дерево 84 - 24.10.08 - 12:48 | пост (80) не к автору а вообще - осень как никак | |||||||||
IamAlexy 85 - 24.10.08 - 12:49 | да пофиг.. мы как писали ЭТО так и будем писать: функция блаблабла(а) запрос = "...."; возврат запрос.выполнить().выгрузить(); конецфунции; Пока а<б цикл контрагент = блаблабла(б); конецЦикла; | |||||||||
Гений 1С 86 - 24.10.08 - 12:49 | (82) придираться к буквам (буквоедство) - это характерная черта программистов... Реально, замечаю часто только у программеров. Для остальных важнее смысл, а не форма. Видимо сказывается нервная дрожь при ошибке одной буквы в идентификаторе и ругательство синтакс чека. | |||||||||
Дерево 87 - 24.10.08 - 12:50 | (83) КэшПоискЗначений = П.Кэши.ПоискЗначений[ВидСубконтоУУ];
"П." это что за зверь? | |||||||||
Гений 1С 88 - 24.10.08 - 12:50 | (85) Вот запрос = "...."; можно было бы прохешировать и не тратить время на компиляцию запроса... | |||||||||
Гений 1С 89 - 24.10.08 - 12:51 | (87) Это сквозная структура, содержит контекст, путешествует по всем функциям блока | |||||||||
0xFFFFFF 90 - 24.10.08 - 12:51 | ||||||||||
Живой Ископаемый 91 - 24.10.08 - 12:51 | вы замучали! буквы "х" и "к" даже не рядом, следите за пальцами когда печатаете, а то меня в мозгу начинаются расходящиеся процессы... | |||||||||
Дерево 92 - 24.10.08 - 12:52 | {Форма.Форма(3,21)}: Переменная не определена (П) КэшПоискЗначений = <<?>>П.Кэши.ПоискЗначений[ВидСубконтоУУ]; {Форма.Форма(3,42)}: Переменная не определена (ВидСубконтоУУ) КэшПоискЗначений = П.Кэши.ПоискЗначений[<<?>>ВидСубконтоУУ]; | |||||||||
Дерево 93 - 24.10.08 - 12:54 | (89)нифига не понял... | |||||||||
Гений 1С 94 - 24.10.08 - 12:55 | (92) ну ты даешь... это же фрагмент кода. а не готовый код. | |||||||||
Гений 1С 95 - 24.10.08 - 12:56 | (91) тренируй восприятие | |||||||||
Гений 1С 96 - 24.10.08 - 12:56 | (90) Уже сказали - 8.2, счас тему поменяю | |||||||||
MSensey 97 - 24.10.08 - 12:56 | (86) Гений, я не придераюсь, и не к буквам. А тому что ты не различаешь кэширование от хеширования. | |||||||||
Дерево 98 - 24.10.08 - 12:57 | (96)Супер!!! | |||||||||
Живой Ископаемый 99 - 24.10.08 - 12:58 | (97) Он различает, я помню ветку когда он про хэширование узнал... | |||||||||
Гений 1С 100 - 24.10.08 - 13:00 | Гы, кстати прикол хотите:
КэшПоискЗначений.Вставить(РезКодПоиска, ?(Результат = Неопределено, NULL, Результат)); //Защита от переполнения памяти! 20081023 Если КэшПоискЗначений.Количество() > 20000 Тогда КэшПоискЗначений.Очистить(); КонецЕсли; |
1 2 ► |
Список тем форума
|