Заметочки про 1С:Предприятие 8 (редакция 23.03.2012)

Заметочки про 1С:Предприятие 8 (редакция 23.03.2012)

За время программирования на 8.х, накопилось пока немного материала, но как мне кажется очень интересного. Появились простые решения, которые в более сложной реализации встречаются в типовых конфигурациях и в некоторых публикациях на Infostart'е. Собственно в статье речь пойдет об этих решениях.


31.05.2010 20:49 [28.04.2012 05:17] (alexk-is) Алексей Константинов 530 [+] [−] Перейти к публикации

Страницы: 1 2 3 4 След.
1.
Evg-Lylyk 01.06.10 14:39 URL

Цитата
Так программный код выполняется значительно быстрее. Всё дело в переходах между командами.

И на сколько быстрее? (примерчик)

Ответили: (2) (3) (4) (16) (19) (320)

2.
alexk-is 01.06.10 14:58 URL

(1) Количество повторов 1000000
Замер код записан в 4 строки. Завершено за 3,329 сек.
Замер код записан в 1 строку. Завершено за 0,5 сек.

У меня получилось приблизительно в 6 раз. Но здесь нужно учитывать только время переходов. Если в цикле будут команды, которые выполняются медленно, то и результаты будут иными.

Ответили: (4)

Изменено: alexk-is - 01.06.10 15:18 (обсчитался)
3.
alexk-is 01.06.10 15:06 URL

(1) Добавил Тест 1

4.
awa 01.06.10 15:14 URL

(1)(2) Я думаю, что разница будет только в режиме отладки. В обычном режиме разницы быть не должно.

Ответили: (6) (12)

5.
Diversus (файл скачал) 01.06.10 15:19 URL

Цитата
Для каждого СтрокаТЗ Из Таблица1 Цикл ЗаполнитьЗначенияСвойств(Таблица2.Добавить(), СтрокаТЗ) КонецЦикла;


А вот так работает, медленней?
Таблица2 = Таблица1.Скопировать();

Или я чего то не понял?

Ответили: (7)

6.
alexk-is 01.06.10 15:39 URL

(4) Эх... раскусил... Да, действительно был включен режим отладки. Переделал тест. Теперь результат такой.

Замер код записан в 6 строк. Завершено за 1,532 сек.
Замер код записан в 1 строку. Завершено за 0,859 сек.

Почти в 2 раза. Тоже не плохо.

Ответили: (304)

7.
alexk-is 01.06.10 15:41 URL

(5) Я имел ввиду вариант Таблица = Таблица1 + Таблица2 + Таблица3 + ... ТаблицаN

8.
e.kogan 01.06.10 15:42 URL

Вот за заход с итоговыми полями в запросе большое спасибо, раньше не встречала.

Ответили: (9) (11)

9.
alexk-is 01.06.10 15:53 URL

(8) Почему не встречала? В http://www.infostart.ru/public/69707/ встречается 4 раза, а эта публикация висит на главной уже больше месяца.

Посмотри её. Там ещё много вкусного smile:)

Ответили: (10)

10.
e.kogan 01.06.10 15:54 URL

(9) Потому что туда в код не залезала, времени не было.

11.
alexk-is 01.06.10 16:02 URL

(8) Ну, хоть кого-то удивил.

12.
alexk-is 01.06.10 16:06 URL

(4) Приложенный тест убедил?

Ответили: (16)

13.
anig99 01.06.10 16:38 URL

хммммм...очень похоже всё-таки на баг компилятора...Скорость работы программы НЕ ДОЛЖНА зависеть от таких вещей...

Ответили: (22)

14.
ildarovich (файл скачал) 01.06.10 16:43 URL

С результатами согласен

Код
Функция ТочноеВремя() 
   
   Script = Новый COMОбъект("MSScriptControl.ScriptControl");
   Script.Language = "javascript"; 
   Возврат Script.eval("new Date().getTime()"); 
   
КонецФункции

Процедура КнопкаСформироватьНажатие(Кнопка)
   
   Старт = ТочноеВремя();
   
   А = 0;
   Для Сч = 1 По 1000000 Цикл
      А = А + 1;
   КонецЦикла;
   
   Сообщить("В несколько строк:" + (ТочноеВремя() - Старт) + " мск");
   
   Старт = ТочноеВремя();
   
   А = 0;Для Сч = 1 По 1000000 Цикл А = А + 1;КонецЦикла;
   
   Сообщить("В одну строку:" + (ТочноеВремя() - Старт) + " мск");
   
КонецПроцедуры

Результат(вне отладки):
В несколько строк:1 531 мск
В одну строку:1 078 мск

Но я бы объяснил это не лишними повторениями или переходами между командами, а наличием возможных точек останова и возможностью указания строки ошибки.

Ответили: (15)

15.
alexk-is 01.06.10 16:56 URL

(14) Не вижу принципиальной разницы. Давай назовем так - Переход между командами с созданием возможных точек останова и возможностью указания строки ошибки. Результаты тестов от этого не изменятся.

Ответили: (16)

16.
awa 01.06.10 17:27 URL

(12)(15) Да, убедил. Это действительно сказываются дополнительные коды (1) в компилированном коде, которые означают номер строки для отладки. В 1С, в отличие от нормальных сред программирования (типа Visual Studio или Embarcadero RAD) нет разделения на режимы компиляции Debug и Release. В 1С, по сути, всегда режим Debug. Ради интереса я перенес тест из формы в модуль обработки, поставил на нее пароль, и обфусцировал ее. Обфускация, кроме всего прочего, выкидывает отладочные коды (1). И результаты сразу стали одинаковыми! Правда, чуть больше, чем не для обфусцированных - вместо 1 сек для 1 строки и 1,4 сек для 6 строк стало по 2 сек. для обоих вариантов, что вполне объяснимо - обфускация добавляет лишние переходы и прочие запутывающие коды.
Но, по большому счету, и раньше было известно, что 1С для всяких сильно вычислительных и переборных задач совсем не подходит. В реальной же жизни, как правило, скорость работы 1С упирается в скорость работы с БД, и на этом фоне оптимизация просто кода 1С приносит практически незаметные результаты.

Ответили: (17)

17.
alexk-is 01.06.10 17:56 URL

(16) Не совсем так. После получения данных из базы наступает момент, когда её необходимо показать пользователю. Вот тут-то и наступает самый интересный момент. Сколько будет стоить поднять производительнось пользовательского ПК, например, на 20% ? А тут халява smile:)

Ответили: (19)

18.
Abadonna 01.06.10 19:46 URL

Что-то мне кажется, что говорить в контексте 1С "скомпилированный" не совсем корректно. 1С таки интерпретатор, имхо.

Ответили: (19)

19.
awa 01.06.10 20:44 URL

(18) На самом деле 1С и компилятор и интерпретатор одновременно. Исходный код компилируется в промежуточный "п-код" либо в момент первого обращения к модулю, если исходный текст модуля открыт, либо заранее, если исходный текст модуля запаролен или исходный текст модуля отсутствует. Далее полученный "п-код" выполняется виртуальной машиной 1С в режиме интерпретатора.
Правда, не знаю, как выполняется клиентский код в тонком и веб-клиентах 8.2.

(17) Ну давай посчитаем. В твоем тесте цикл выполняется миллион раз, в варианте шести строк внутри цикла 4 строки, т.е. за время выполнения теста происходит обработка отладочного кода (1) четыре миллиона раз. Именно этих четырех миллионов вызвовов команды (1) нет в варианте с одной строкой. Уходит на это примерно пол-секунды (на моем рабочем компе разница между тестами 0.4 секунды). В обычной жизни для вывода пользователю результатов запроса из БД надо выполнить не более нескольких тысяч строк (с учетом всех циклов), что на три порядка меньше, чем в тесте. Т.е. способом "пишем всю программу в одну строку" ты будешь ловить миллисекунды.
Я отнюдь не отрицаю, что эффект есть, я просто говорю, что, как правило, он совсем не стоит внимания. Возможно, в исключительных случаях, и бывает, что таким способом можно получить хоть немного заметную экономию времени. Но скорее всего, это тяжелые алгоритмические или переборные задачи, которые, в таком уж случае, гораздо эффективнее писать на других, компилируемых, языках. С++, например. Выигрыш по времени выполнения чисто алгоритмической программы на С++ по сравнению с 1С может достигать нескольких тысяч раз.

Ответили: (24)

20.
anig99 01.06.10 21:10 URL

а если запоролить обработку?

21.
WKBAPKA (файл скачал) 02.06.10 8:34 URL

а про циклы мне не совсем понятно... вернее понятно smile:o , но почему так?

22.
WKBAPKA (файл скачал) 02.06.10 8:37 URL

2(13): вот и я о том подумал, на самом деле, одна строка или 6 строк, машине (компилятору) по барабану, для нее на вход поступает линейный поток символов (включая управляющие символы). И какая тут разница, сколько строк или пробелов? Это разве что, время разбора лексем увеличивается за счет работы со строками, типа, чем больше пробелов и прочих не значащих символов, тем больше время разбора, но что бы в два раза!!!

23.
WKBAPKA (файл скачал) 02.06.10 8:40 URL

прочитал последние посты, вопросы отпали... smile:)

24.
anig99 02.06.10 8:55 URL

(19) к тому же множество выкладок по оптимизации кода идет в сторону сокращения циклов или полного их устранения за счет запросов/переноса на сервер...

25.
awa 02.06.10 10:01 URL

Кстати, в приведенном коде разбора строки с элементами в массив, есть ошибка, а точнее ограничение. Если в элементах разбираемой строки встречается двойная кавычка, то приведенный код упадет. Поэтому перед преобразованием надо добавить

Код
РазбираемаяСтрока = СтрЗаменить(РазбираемаяСтрока, """", """""");

Ответили: (27)

26.
WellMaster 02.06.10 10:32 URL

Иногда встречал простые задачи, которые нельзя ни перенести на сервер, ни реализовать на запросах - все делалось на клиенте.
Вот мои замеры (10 млн итераций):

Замер код записан в 6 строк. Завершено за 25,652 сек.
Замер код записан в 1 строку. Завершено за 14,771 сек.

11 секунд выигрыша в моем случае - большой плюс.
Предложенный способ оптимизации действительно отношу к особенностям компилятора/интерпритатора, а не к оптимизации кода в полном смысле этого слова.
Но все равно плюс автору за статью.

27.
alexk-is 02.06.10 10:36 URL

(25) Ни каких ограничений нет. См. пост (25) - там смимаются все ограничения. smile:)

А если серьезно, то у меня такой способ разбора строк встречается часто. Взял из модуля, где разбираются строки вида ЭлементыФормы.КоманднаяПанель.Кнопки.Подменю.Кнопки.Действие.Подсказка

Главное ведь сам прицип. Если принцип понятен, то модифицировать команду под разбор, например, строки чисел уже не составит труда.

(Подсказка: S заменить на N и убрать некоторые кавычки)

28.
Ish_2 (файл скачал) 02.06.10 13:08 URL

1. Почему для построения двухуровневого дерева нельзя обойтись только первой частью запроса ?

2. Зачем в одной колонке нужно иметь разные типы ?

3. Не понял текста запроса после "Объединить Все" .
- Второй запрос будет пустым . зачем это нужно ?
4.
"ИТОГИ
| Организация КАК СтруктураДоговоров,
| СУММА(Сумма)
|ПО
| Организация");"

- После опции ИТОГИ употреблена не агрегатная функция , а "Организация" .
Что это ?

29.
Ish_2 (файл скачал) 02.06.10 13:15 URL

Виноват. Дошло.

Ответили: (30)

30.
alexk-is 02.06.10 19:01 URL

(29) Вот пока выложил только скриншот "Пример 3". Как думаешь, это будет интересно?
В двух словах - там по периодическому регистру сведений КурсыВалют вычисляются периоды действия курсов и ещё ряд показателей, при этом исключаются записи в которых курс установлен такой же как в предыдущей записи.

Ответили: (34)

31.
Ish_2 (файл скачал) 02.06.10 19:19 URL

(31) Пока замечание.
Оформлял бы запросы с помощью временных таблиц. И надежнее в выполнении и нагляднее. Уж сколько говорено на эту тему ...
И 1с рекомендует обходиться без вложенных запросов.

Ответили: (31) (34)

32.
Ish_2 (файл скачал) 02.06.10 19:27 URL

Кстати , по пред.сообщению . А я получал такие двухуровневые деревья в "лоб", т.е. в цикле прокручивал выборку и заполнял каждую строку дерева. Твой способ ,насколько я понимаю, побыстрее и поизящнее.

Ответили: (33)

33.
alexk-is 02.06.10 20:07 URL

(32) Ну, да. Иначе зачем огород городить?

34.
alexk-is 02.06.10 21:55 URL

(31) Переделал на пакетный запрос.
Однако вопрос в (30) был не про "Пример 2", а про "Пример 3".

35.
Поручик (файл скачал) 02.06.10 23:01 URL

Покажи пример. Интересно. Я так понял, на нём можно построить что-то таблицы изменения задолженности.

Фичу с контрагентами будет время воткну в конфу.

Ответили: (36)

36.
alexk-is 02.06.10 23:40 URL

(35) Изменение задолженности? Разве типовые отчеты этого не показывают? Хотя остатки в разрезе документов можно таким образом развернуть.

Нет. Я имел ввиду несколько иное представление именно периодических регистров сведений: КурсыВалют, ЦеныНоменклатуры и т.д. Где это может использоваться? Например, здесь http://infostart.ru/public/70802/

37.
alexk-is 03.06.10 12:40 URL

Добавил про сворачивание массивов.

38.
Ish_2 (файл скачал) 04.06.10 10:42 URL

Для ,в целом симпатичного, примера 3 нужно указать , что в случае большой таблицы регистра КурсыВалют (более 1000 записей), мы получим серьезное замедление.
Дело , конечно, в том , что при соединении по неравенству в первом запросе размер "промежуточной" таблицы запроса резко возрастает.

Например , получение первой временной таблицы Периоды при помощи кодинга может дать многократный выигрыш по быстродействию .

Ответили: (39) (40)

39.
alexk-is 04.06.10 11:18 URL

(38) По оптимизации выборки в нарастающих итогах могу дать ссылочку http://infostart.ru/public/61295/ smile:)

Здесь фишка в другом - убрать повторяющиеся данные из цепочки, а оставить только точки перехода с датами, когда данный переход был выполнен.
Т.е. для цепочки 0, 0, 1, 1, 1, 0, 0, 0, 1
должны остаться только 0, 1, 0, 1

Ответили: (70)

40.
Шёпот теней 04.06.10 11:53 URL

(38) ... неужели ... не ужели ... НЕужели ... неУЖЕЛИ ... вотВЕДЬвот ...

Ответили: (42)

41.
Ish_2 (файл скачал) 04.06.10 12:06 URL

Второй в пакете запрос я еще не осилил - до твоей "фишки" не дошел.

Отметив возможное замедление , продолжим "ковырять" первый запрос пакета.
В нем фильтрация по &Валюта применена дважды , причем один раз в условии соединения. На мой взгляд , эффективнее и понятнее будет следующий запрос для получения временной таблицы "Соединения"

Выбрать РАЗРЕШЕННЫЕ КурсыВалют.Период
Поместить Периоды
из Регистр.КурсыВалют
Где КурсыВалют.Валюта=&Валюта;

ВЫБРАТЬ
Периоды.Период как Период1,
Максимум (ЕСТЬNULL(Периоды1.Период, Периоды.Период)) КАК Период2
Поместить Соединения
Из
Периоды КАК Периоды
Левое Соединение Периоды КАК Периоды1
Периоды.Период > Периоды1.Период
Сгруппировать по
Периоды.Период

Ответили: (44) (47)

42.
Ish_2 (файл скачал) 04.06.10 12:09 URL

(40) Да ,Шепот. Применение в запросе соединения по неравенству - "в лоб" ,
может дать плачевные результаты.

43.
Ish_2 (файл скачал) 04.06.10 13:33 URL

Посмотрел второй запрос.
Пример 3 хорош лишь как любопытная демонстрация запросной техники , но ни в коем случае не образец решения задачи. Лучше бы явно это указать в теме.
Действительно , выгрузив таблицу регистра в таблицу значений мы за ОДИН проход получим выходное дерево многократно быстрее.

Ответили: (45)

44.
alexk-is 04.06.10 13:36 URL

(41) smile:)

Цитата
- Как-то не очень получается...
- Конечно можно и получше нарисовать. Ну, там в трехмерной проекции...
- А я бы нарисовал немного в профиль
- Да потому, что у вас всё в профиль
© Миссия Клеопатра


Добавил вариант с оптимизацией. Работает немного побыстрее, но понять, что делается в двенадцати пакетном запросе мне кажется сложнее. smile:)

45.
alexk-is 04.06.10 13:43 URL

(43) Там не дерево. Там список.

46.
anig99 04.06.10 14:30 URL

а на том дереве... или плоды познания, или русалка, или вообще кот, который ссыт в тапки...

Ответили: (49)

Изменено: anig99 - 04.06.10 14:30
47.
alexk-is 04.06.10 14:30 URL

(41) Хочу скромно поинтересоваться по поводу "Пример 3 с оптимизацией"...
Ну, как?

48.
Ish_2 (файл скачал) 04.06.10 14:34 URL

Хм.. А как у тебя тема обновляется ?
Скромно поинтересуюсь : а можно посмотреть пример 3 - оба варианта до оптимизации и после.

Первый запрос не изменился. Во втором поля выборки, два внутренних соединения, Итоги - как были так и остались.

Ответили: (50)

Изменено: Ish_2 - 04.06.10 14:37
49.
Ish_2 (файл скачал) 04.06.10 14:38 URL

За (46) гони Сашу , он нас с сурьёзного настроя сбивает.

Ответили: (59)

50.
alexk-is 04.06.10 14:47 URL

(48) Там ещё 1 файл. Теперь их 5. Должен быть пакет из 12 запросов

Ответили: (52)

51.
Ish_2 (файл скачал) 04.06.10 14:54 URL

Так я то текст темы смотрю ! А ты в файлах .

Ответили: (56)

52.
Ish_2 (файл скачал) 04.06.10 15:04 URL

(50) Скачал .Посмотрел. Мда.. "Он уважать себя заставил" !
Ты не подумай - я тоже энтузиаст и всё такое...
Но увидев текст пакета оробел : стоило ли ?

Ответили: (53)

53.
alexk-is 04.06.10 15:08 URL

(52) Что нам стоит дом построть - нарисуем будем жить! smile:)
Ну, так как?

Ответили: (60)

54.
Ish_2 (файл скачал) 04.06.10 15:08 URL

Представляешь , а если бы в языке запросов для
временных таблиц был возможен UPDATE ?
Ведь тогда - все эти выкрутасы с соединениеми по неравенству были не нужны !
Одна команда UPDATE - и всё !

Ответили: (58)

55.
Ish_2 (файл скачал) 04.06.10 15:10 URL

Кхе-кхе ... Придется смотреть попристальнее . Вот блин...

56.
alexk-is 04.06.10 15:27 URL

(51) "Пример 3" в статью вставить не решился. Не хочу пока народ пугать. В статье пока "Пример 2".

57.
Ish_2 (файл скачал) 04.06.10 15:36 URL

А ты опубликуй этот длиннющий пакет.
А ниже приведи текст кода в 15-20 строчек решающий эту же задачу , причем в любом варианте быстрее чем запрос.
И вывод : дескать решайте сами !

Ответили: (58) (200)

58.
anig99 04.06.10 15:44 URL

(54) по поводу апдейта для решения проблем с нарастающими итогами говорено давно... Иначе оптимизированный запрос с соединением по неравенству занимает много страниц... Некоторые "гуру" даже разбираться не хотят (:
На самом такими темпами нужно ждать 1с 8.5 или 9.0, где будет реализована возможность редактирвания ВРЕМЕННЫХ таблиц и что-то типа UPDATE.
(57) там можно в меньше, чем 15 строчек уложиться...вопрос только в производительности... А производительсноть повышается 3 способами:
1. Наращивание железа
2. Оптимизация рутинных операций путем переписывания на assemblere (или другом языке)
3. Написанием сложного и длинного алгоритма, возможно с применением математических моделей.

59.
anig99 04.06.10 15:45 URL

(49) пятница...жарко...вечером ещё ехать на шабашку... дай коту нассать в тапки...

60.
Ish_2 (файл скачал) 07.06.10 8:08 URL

(53) В субботу попробовал твой "Пример № 3"
Теперь и ты отведай моего гостинца .

1. Текст запроса сокращен в 1,5 раза.
2. Быстродействие запроса увеличилось в 1,5 раза

В прикрепл.файле "Гостинец" твоя обработка "пример № 3" с измененным текстом запроса.

Ответили: (61) (68) (82) (121)

61.
alexk-is 07.06.10 10:12 URL

(60) Всё зависит от информационной базы. На SQL разницы не получилось, а вот на файловой "гостинец" на 18% быстрее. Только "гостинец" по первой дате выдает неправильный результат в "Изменение курса". Всё равно спасибо. Буду изучать.

Ответили: (62) (63)

62.
Ish_2 (файл скачал) 07.06.10 10:20 URL

(61) Проверялась в субботу действительно на файловом варианте.

На небольших объёмах проверять бессмысленно.
Создай 1 000 - 10 000 различных курсов по одной валюте и сравни результаты.
выигрыш в быстродействии должен быть никак не меньше 1.5 раза.
На мой вкус, "Гостинец" в первой строке выдает как раз правильный результат :
"Изменение курса" в первой строке не имеет смысла , т.к. пред.курс неизвестен.

63.
vip 07.06.10 10:23 URL

(61) > Только "гостинец" по первой дате выдает неправильный результат в "Изменение курса".

Да наплюй ты на результат. Главное, шо 18%.

Ответили: (64)

64.
alexk-is 07.06.10 10:27 URL

(63) Дошел до 4 и 5 запросов в пакете - случился взрыв мозга. Иду за кофе...

Ответили: (65) (66)

65.
Ish_2 (файл скачал) 07.06.10 10:40 URL

(64) "Взрыв мозга" , на самом деле, - это мне минус.
Нужно было оставить комментарии.

Ответили: (66)

66.
anig99 07.06.10 12:58 URL

(65)(64) а комментарии - это моя статья про нарастающие итоги (: Как раз разбиение соединений сначала на более крупные периоды, а потом на более мелкие.

Ответили: (67)

67.
Ish_2 (файл скачал) 07.06.10 13:03 URL

(66) Саша, ты не в теме. Совсем.

Ответили: (68)

68.
anig99 07.06.10 14:01 URL

(67) думаешь, если тут коты в тапки ссут, то я не в теме? Я посмотрел гостинец из (60)... Разве там не продемонстрировано применение сложного алгоритма для оптимизации времени выполнения запроса?

Ответили: (70) (121) (123)

69.
Ish_2 (файл скачал) 07.06.10 14:03 URL

А пока помечтаем и о другой необходимой возможности в языке запросов 1с :
указывать в полях выборки запрос . Разумеется , такая возможность давно реализована в диалектах SQL.
И тогда вместо соединения по неравенству можно следующее, многократно более эффективное :

Код
Выбрать 
КВ.Период  как ТекущийПериод,
(Выбрать Первые 1 
КВвнутр.Период из РегистрСведений.КурсыВалют как КВвнутр
ГДЕ  КВвнутр.Период<КВ.Период  
Упорядочить ПО КВвнутр.Период Убыв) как ПредыдущийПериод 
ИЗ РегистрСведений.КурсыВалют как КВ

Ответили: (71)

70.
Ish_2 (файл скачал) 07.06.10 14:09 URL

(68) Да , это так . Этот подход применил Алексей - я лишь повторил его.
Дело совсем не в этом .
Всё крутится вокруг "фишки"( Алексей употребил это слово) в (39).

71.
vip 07.06.10 14:19 URL

(69)

Цитата
Разумеется , такая возможность давно реализована в диалектах SQL.

Разумеется.
И в 1С++ тоже.
Все чаще ловлю себя на мысли, что с 1С++ (в связке с FormEx, разумеется) не осталось ничего, о чем стоит помечтать.
Пора, наверное, на восьмерку. Освежить, так сказать, мечтательный раздел мозга.

Ответили: (72) (74)

82.
alexk-is 07.06.10 15:54 URL

(60) Загрузил курсы валют за 12 лет. Получил следующие результаты для файловой версии.

Вариант 3. Обычное соединение. Завершено за ~35,5 сек.
Вариант 3. Оптимизированное соединение. Завершено за ~12,5 сек.
Гостинец. Оптимизированное соединение. Завершено за ~12,5 сек.
Починенный Гостинец. Оптимизированное соединение. Завершено за ~12,5 сек.

Разница в производительности очень не значительная smile:(

Ответили: (101)

101.
Ish_2 (файл скачал) 07.06.10 18:20 URL

(82) Давай подробнее.
Рассматривается файловый вариант. Исследуются две обработки
"Гостинец.epf"
и "Пример 3_2" , скачанный в текущей теме сегодня в 18-20 мск.

Количество ежедневных курсов (подряд) с 1998 года по сегодняшний день составило в тестовой базе БП 1.6 - 4400 шт.
Замер времени исполнения запроса производился средствами ТВОЕЙ обработки.
Каждая обработка запускалась 3 разF.

Время выполнения Гостинец.epf - ~ 11.7 сек
Время выполнения Пример3_2.epf - ~ 17.7 сек
Выигрыш 1.5 раза.

Кто нас рассудит ? Помогите , люди добрые !

Ответили: (104)

102.
Ish_2 (файл скачал) 07.06.10 18:37 URL

И вот еще что .
Алексей , оно ,конечно, дело твоё - имеешь право скрывать чужие комментарии в своей теме. Но комментарии vip'a ты скрыл зря. У меня остался какой-то гаденький привкус.

Ответили: (103) (107) (108)

103.
Abadonna 07.06.10 19:49 URL

(102) Закрыл Арчи. Так что к Алексею ты не по адресу smile;)
Ежели честно: там был околотемный флад. Хотя и не такой уж фладистый smile;)
Короче: стандартный спор упертых семерочников со мной широкообразованным ( smile:D ), начиная от 2.0 до 8.2 smile;)

Изменено: Abadonna - 07.06.10 19:55
104.
alexk-is 07.06.10 22:16 URL

(101) Так. Был немного занят - делал сыну мечи.
Итак дома загрузил курсы в БП 1.6 - 8491 запись в регистре сведений Курсы валют по EUR и USD с 01.01.1999

Время выполнения Гостинец.epf - ~ 12.3 сек
Время выполнения Пример3_2.epf - ~ 12.6 сек
Время выполнения Пример3.epf - ~ 35.5 сек

105.
Ish_2 (файл скачал) 07.06.10 22:17 URL

Алексею- пардон.
Арчибальду - Фи..

Ответили: (106) (111)

106.
alexk-is 08.06.10 0:01 URL

(105) Вот вариант, который показал наилучший результат в файловой версии для 8491 записей. Убрал все индексы. Этот вариант ещё меньше и работает правильно smile:)

Время выполнения Пример3_3.epf - ~ 1.7 сек

Ответили: (112) (114) (118)

107.
vip 08.06.10 5:56 URL

(102) Чтобы не оставалось привкуса, скопировал удаленные посты тебе в личку.
Как видишь, ничего особенного, кроме отхода от темы ветки, который поддержали кстати и ув. модераторы.
Приношу автору извинения.
А мысли мои по поводу 8.2 повторяются здесь http://infostart.ru/public/71438/?PAGEN_1=1#comm

Ответили: (108) (110) (121) (123)

108.
Арчибальд 08.06.10 7:39 URL

(102)(107) Реально, конечно, это был не совсем флуд, а один из аспектов темы 8. Но раз автор возразил (и обоснованно) - мои действия считаю правильными.

Ответили: (109)

109.
Ish_2 (файл скачал) 08.06.10 7:42 URL

(108) Ок.

110.
Ish_2 (файл скачал) 08.06.10 7:44 URL

(107) Ага.Спасибо.

111.
Арчибальд 08.06.10 7:44 URL

(105) Радуйся, что в правилах ИС отсутствует прямой запрет на обсуждение действий модераторов smile:evil:

112.
Ish_2 (файл скачал) 08.06.10 7:50 URL

(106) Посмотрю чуть позже.

113.
alexk-is 08.06.10 7:51 URL

Народ, вы что, опять начинаете?

114.
Ish_2 (файл скачал) 08.06.10 8:08 URL

(106) Бегло всё-таки посмотрел.
Кроме последнего запроса - это Гостинец.epf.
Хм. Странно. За счет чего тогда ускорение в 8 раз (я проверил)?
Подскажи.

115.
Ish_2 (файл скачал) 08.06.10 8:26 URL

Не удержался- копнул.
Последний запрос ( чем отличается Пример3_3 от гостинца)- никакой прибавки к быстродействию не даёт.
Львиную долю времени (90%) занимает запрос соединения по неравенству.
Если из первого запроса "Гостинца" убрать строку "Индексировать по Период1,Период2"
то мы и получим быстродействие 1.5 сек.
В свою очередь , если мы добавим строку "Индексировать по Период1,Период2" в твой Пример 3_3 ,то получим те самые 11.7 сек (т.е. запрос из-за этой строки выполнился медленне в 8 раз ).
И честно говоря - это очень и очень странно.
Явное создание необходимого индекса многократно тормозит общий пакет запроса. Получается , что оптимизатор запроса лучше создает тот самый индекс.

Ответили: (117) (118) (120)

116.
Ish_2 (файл скачал) 08.06.10 8:31 URL

И где Артур Artbear ? Он как-то меня убедил, что явное создание необходимых индексов для временной таблицы есть благо. Пусть ответит перед "доверчивыми людями" !

117.
artbear 08.06.10 9:38 URL

(115) Ага, я сам в последнее время разочаровываюсь во временных таблицах 1С smile:(
Очень часто обычный запрос, без временных таблиц, реально быстрее, в несколько раз, чем запрос, построенный на ВТ

Ответили: (119)

118.
alexk-is 08.06.10 10:48 URL

(115) В (106) я сразу написал, что убрал все индексы. Да, это "Гостинец", я уже писал об этом, но видимо где-то потерялось. Ещё раз: "Да, это Гостинец", только из первого запроса убрал лишнюю операцию с датами, объединил 6 и 7 пакет и исправил ошибку в первой записи.

Я выложил новые "Пример3" и "Пример3_2". На небольших объемам данных "Пример3" показывает изумительные результаты, а на больших объемах "Пример3_2" держит паритет с "Гостинец". smile:)

Про временные таблицы вот что я думаю. Для файловой версии во временных таблицах видимо используется какая-то оптимизация, которая, возможно, использует существующие индексы, которые возможно транслируются во временные таблицы.

В таком случае, принудительная индексация имеет смысл только для таблиц без индексов, например, табличных частей документов или для таблиц значений.

Но это пока только догадки. Нужно тестировать.

119.
Ish_2 (файл скачал) 08.06.10 10:50 URL

(117) Вопрос несколько в другом.
Явное использование во временной таблице Опции "Индексировать" (т.е. создание индекса) приводит в дальнейшем к очень серьезному замедлению при обращении к этой таблицы. Казалось бы , этого в принципе быть не должно.

Ответили: (122)

120.
alexk-is 08.06.10 10:55 URL

(115) Даже так. smile:)

Время выполнения Гостинец.epf - ~ 1.7 сек
Время выполнения Пример3_2.epf - ~ 1.5 сек

121.
Ish_2 (файл скачал) 08.06.10 11:10 URL

Давай уж добьем до конца этот вопрос.
(68) ,(107) Саша и Артур , просьба :
Пожалуйста , протестируйте и сравните на предмет быстродействия:
1. Прикрепленную обработку в (60) Гостинец.epf
2. В текущей теме в разделе "файлы" четвертый файл "пример с оптимизацией" Пример 3_2.epf.

Нужно в БП , а потом в УТ создать ежедневные разные курсы по одной валюте за 12 лет и запустить обработки 1 и 2. Сравнить время выполнения .
Не откажите хорошему человеку. Вы нас рассудите с Алексеем.

P.s. Было бы хорошо - и для файлового варианта и для клиент-серверного.

Ответили: (127)

Изменено: Ish_2 - 08.06.10 11:12
122.
alexk-is 08.06.10 11:43 URL

(119) Возможно потеря времени не приобращении к ВТ, а при построении индекса?

123.
Ish_2 (файл скачал) 08.06.10 11:48 URL

+(68),(107) Виноват. Алексей уже успел поменять на новую версию свой "пример3_2" .
Сравнивать нужно с первоначальным примером.

Ответили: (124) (126)

124.
alexk-is 08.06.10 12:23 URL

(123) А не проще из "Гостинец" вырезать 3 строки?
ИНДЕКСИРОВАТЬ ПО
Период1,
Период2

Ответили: (125)

125.
Abadonna 08.06.10 12:28 URL

(124) А не проще прекратить быстродействиями меряться? smile:D
Практической пользы - практически ноль. Ну, одна за 17 секунд, другая за 15...
Ну и фигли? smile;)
Нажал я кнопочку "Загрузить" и пишу этот коммент (а менеджер по асе девочку охмуряет).
Один фиг загрузит быстрее, чем вышеизложенное smile;)

Изменено: Abadonna - 08.06.10 12:34
126.
alexk-is 08.06.10 12:28 URL

(123) smile:)

Цитата
- У меня программа в 2 раза меньше твоей, работает в 10 раз быстрее, имеет изумительное юзабилити.
- Ну, и что? Зато моя работает правильно.


А если серьезно, то мне понравилось решение в "Гостинец", иначе не появился бы "Пример3_3".

Ответили: (128)

127.
artbear 08.06.10 12:48 URL

(121) Пока некогда тестировать smile:(
пока только иногда почитываю

128.
Ish_2 (файл скачал) 08.06.10 12:54 URL

(126) Черт возьми ! Возник спор - нужно установить факты.
После того как факты установлены - делиться размышлизмами и делать выводы .

Ответили: (129)

Страницы: 1 2 3 4 След.

530 [+] [−] Перейти к публикации