Имя: Пароль:
1C
1С v8
Как ускорить работу с таблицей значений?
0 John83
 
20.09.20
12:53
Вот тут возможно что-то сделать?

Для Каждого стр Из ТабОрдеров Цикл            
    Если стр.Вид = "Продажа" И Курс >= Стр.КурсСделки Тогда
        Доллар = Доллар + Стр.Количество * стр.КурсСделки - (Стр.Количество * стр.КурсСделки)/100*0.075;
        СтрокиКУдалению.Добавить(стр);
        КолвоСделок = КолвоСделок+1;
    ИначеЕсли стр.Вид = "Покупка" И Курс <= стр.КурсСделки Тогда
        Эфир = Эфир + стр.КурсВхода/стр.КурсСделки*стр.Количество - (стр.КурсВхода/стр.КурсСделки*стр.Количество)/100*0.075;
        СтрокиКУдалению.Добавить(стр);
        КолвоСделок = КолвоСделок+1;
    КонецЕсли;
КонецЦикла;

Или может вместо таблицы что-то другое использовать?

Задача состоит в том, что тестирую бота. В РС загрузил курсы и в цикле все это обрабатываю.
1 Cthulhu
 
20.09.20
12:59
начните с хронометража в отладке. макс.тормоза - сюда.
2 RomanYS
 
20.09.20
13:00
(0) Или может вместо таблицы что-то другое использовать?
Если данные в РС, то логично использовать запрос.

А замер делал? Сомнительно что тормоза в этом коде
3 John83
 
20.09.20
13:14
(2) в РС хранится дата и курс. Разумеется эти данные извлекаю запросом
4 RomanYS
 
20.09.20
13:18
(3) Извлекай с учетом всех условий, не нужно перебирать и фильтровать
5 МихаилМ
 
20.09.20
13:30
(0)с помощью пз отфильтруйте тз в 2 тз. далее в обсчитайте в фз.

либо попробуйте в скд с сверткой по полю вид .
6 John83
 
20.09.20
13:48
(5) ч.т. пз и фз?
7 John83
 
20.09.20
13:51
(4) сначала на ТЗ делать условие НайтиСтроки?
8 H A D G E H O G s
 
20.09.20
13:54
Тут нечему тормозить.
Сколько строк в таблице, какое время выполнения, что показывает замер?
9 Chameleon1980
 
20.09.20
13:56
пз построителт
фз, наверное, функция запрса
10 John83
 
20.09.20
13:58
11 H A D G E H O G s
 
20.09.20
14:02
(10) не 10 строк, а 215000 строк. Просадки на арифметике.
12 John83
 
20.09.20
14:12
(11) откуда такое умозаключение?
13 ДенисЧ
 
20.09.20
14:14
(12) Мда...
14 Cyberhawk
 
20.09.20
14:15
(12) Из 4-го столбика
15 John83
 
20.09.20
14:20
(14) можно разжевать для танкистов?
16 Cyberhawk
 
20.09.20
14:25
(15) Нумерация с 1
17 John83
 
20.09.20
14:28
(16) что нумерация с 1?
18 МихаилМ
 
20.09.20
15:50
фз - фоновое задание
19 hhhh
 
20.09.20
16:27
(15) на вашей картинке 4-й столбец, там указано количество раз, и видим, что 214797 раз вызывается эта строка.
20 John83
 
20.09.20
16:40
(19) ну логично же :)
и это я показал только малую часть от всего времени
Выборка проходит по всем курсам валют и внутри этого цикла происходит обработка данных.
В выборке где-то полтора миллиона записей. Плюс эту выборку нужно повторить где-то 200 раз.
А ТЗ по факту, никогда больше 10 строк не собирается.
21 hhhh
 
20.09.20
17:36
(20) тогда зачем вы такой дебильный запрос задали "Как ускорить работу с таблицей значений?". Это неуважение к форуму.
22 RomanYS
 
20.09.20
17:36
(10) странный замер какой-то. Почему тупая арифметика в первых 5 строках на 1.5 порядка медленнее тупой арифметики в строке с расчетом УменьшениеЦены?
Повторять пробовал, картина не меняется?

(20) Просто получи нужные 10 строк запросом
23 Злопчинский
 
20.09.20
20:56
извинте, но 5 копеек. в чем глубокий смысл сначала делить на 10, а потом умножать на 0.075
24 RomanYS
 
20.09.20
21:06
(23) не на 10, а на сто.
Предположу, что в будущем можно будет заменить 0.075 на ПроцентКомиссии например
25 John83
 
20.09.20
21:54
(23) ну да, буквально только что сделал *0.99925
(24) все так и есть
26 lubitelxml
 
20.09.20
21:58
Убрать постобработку данных (расчет) и сделать все запросом.
27 Cyberhawk
 
21.09.20
14:00
(17) Столбиков
28 TormozIT
 
гуру
21.09.20
17:00
Слишком высокая точность чисел? Покажи в отладчике целиком все операнды на лидирующей в замере строке.
29 TormozIT
 
гуру
21.09.20
17:02
Являются ли какие то переменные-операнды в этой строке параметрами метода, передаваемыми по ссылке?
30 TormozIT
 
гуру
21.09.20
17:03
Этот код выполняется на клиенте или на сервере?
31 TormozIT
 
гуру
21.09.20
17:05
(30) Увидел - на клиенте. Возможно что какие то из этих переменных отображаются на форме. Поэтому при каждом их изменении срабатывает перерисовка визуального представления.
32 RomanYS
 
21.09.20
17:09
(31) кстати вариант, это объяснило бы странности в (22)
33 Cthulhu
 
21.09.20
17:17
(31),(32): не вариант. отрисовка замораживается на время выполнения одного потока кода. (да-да-да, и в восьмерке тоже...)
34 RomanYS
 
21.09.20
17:26
(33) тупой замер показывает стабильную разницу ~20%. (22) это точно не объясняет
35 TormozIT
 
гуру
21.09.20
17:37
(33) Ошибаешься. Обычные формы во многих случаях перерисовываются синхронно.
36 Жан Пердежон
 
21.09.20
17:40
ТС пишет одно, замеры приводит другие,
что ускорять по таким замерам вообще не понятно,
почему в запросе сразу нельзя посчитать - молчит.
Мутный тип.
37 RomanYS
 
21.09.20
17:43
(35) Бинго!
Для ОФ разница в 30 раз

    ТВ = ТекущаяУниверсальнаяДатаВМиллисекундах();
    Переменная = 0;
    Для инд = 1 По 100000 Цикл
        Переменная = Переменная + 1;
    КонецЦикла;
    Сообщить((ТекущаяУниверсальнаяДатаВМиллисекундах()- ТВ));
    
    
    ТВ = ТекущаяУниверсальнаяДатаВМиллисекундах();
    РеквизитФормы = 0;
    Для инд = 1 По 100000 Цикл
        РеквизитФормы = РеквизитФормы + 1;
    КонецЦикла;
    Сообщить((ТекущаяУниверсальнаяДатаВМиллисекундах()- ТВ));
38 John83
 
21.09.20
17:50
(31) кстати да
на форму выведены некоторые переменные
39 John83
 
21.09.20
17:51
(28) и точность надо бы снизить
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший