Вход | Регистрация


1С:Предприятие ::

Метки: 

Сортировка ТЧ влияет на скорость

Я
   RomaH
 
26.11.17 - 12:59
СтрокиСКодом = Объект.Пациенты.НайтиСтроки(Новый Структура("КодПациента",КодПациента));

при этом "программная" сортировка без записи не помогает, 

Документ.РеестрЛицПодлежащихДиспансеризации.Форма.ФормаДокумента.Форма    903    СтрокиСКодом = Объект.Пациенты.НайтиСтроки(Новый Структура("КодПациента",КодПациента));    20    13,011470    99,75

а вот после интерактивной сортировки и записи документа:

Документ.РеестрЛицПодлежащихДиспансеризации.Форма.ФормаДокумента.Форма    903    СтрокиСКодом = Объект.Пациенты.НайтиСтроки(Новый Структура("КодПациента",КодПациента));    3 137    1,854233    75,76

почему так?
 
  Рекламное место пустует
   RomaH
 
1 - 26.11.17 - 13:08
сортировка не влияет
перед выполнения кода надо записать документ - тогда быстро
если просто открыть и выполнить код - медленно
открыть - записать и выполнить - быстро
   H A D G E H O G s
 
2 - 26.11.17 - 13:11
(1) Ну может при записи строки документа доползают до клиента.
   RomaH
 
3 - 26.11.17 - 13:15
(2) ну может
хотя ТЧ выведена на форму, КодПациента - показывает
просто реально попадалово получается
на тесте отрабатывает за 2 секунды
а на рабочей можно попасть на зависон в пару часов
   Zhuravlik
 
4 - 26.11.17 - 14:21
А если в индекс "КодПациента" добавить?
   RomaH
 
5 - 26.11.17 - 14:46
(4) пробовал - не помогает
   МимохожийОднако
 
6 - 26.11.17 - 14:50
Замеры делал? На какой процедуре зависон.
   Zhuravlik
 
7 - 26.11.17 - 14:56
(0) А сколько строк в документе? Висяки везде, или только на одном каком-то?
   NorthWind
 
8 - 26.11.17 - 15:02
(0) Индексация таблицы немного помогает. На 30 000 строках при многократом выполнении НайтиСтроки некоторый выигрыш во времени замечал в случае, если ТЗ была индексирована по поисковой колонке. Насчет сортировки не знаю.
   Сияющий Асинхраль
 
9 - 26.11.17 - 15:04
Если уж автор экспериментирует, то интересно, что будет, если заменить НайтиСтроки запросом, и какова будет скорость, если работу с табличной частью заменить работой с таблицей значений, выгрузив ее предварительно...
   NorthWind
 
10 - 26.11.17 - 15:06
(9) Если запрос через построитель запросов, то точно дрянь будет. Проверял. НайтиСтроки гораздо лучше. Вот здесь мои эксперименты по данной тематике: http://catalog.mista.ru/public/617455/
 
 
   NorthWind
 
11 - 26.11.17 - 15:12
Хотя тут речь про ТЧ, а не про ТЗ... тогда извиняюсь, там может быть все по-другому
   Сияющий Асинхраль
 
12 - 26.11.17 - 15:19
(11) Я до сих пор считал, что ТЗ, передаваемая в запрос сначала сбрасывается на винт, что, по идее, само по себе затратная операция. Если же работа с табличной частью, то тут уже все на винте... Хотя может я не прав, но тоже раньше как-то экспериментировал, у меня получалось, что с записанными на винт данными запросы оперировали быстрее типовых функций типа найти строки и т.д.
   Сияющий в темноте
 
13 - 26.11.17 - 15:37
скуль сбросит в память или на винт таблицу,но с ней ему гамного быстрее работать
   NorthWind
 
14 - 26.11.17 - 15:38
(12) возможно, в моем случае дело было как раз в этом. Я там как раз разбирал 1Совский код, где, как выяснилось, из ТЗ посторителем запроса в цикле выдергивались строки. Код работал непотребно долго.
   RomaH
 
15 - 26.11.17 - 23:32
вы хоть почитайте для начала нулевой пост, потом остальные
замеры все есть

проблема не в том что "долго"
а в том, что "долго" в определенной ситуации

есть "нормальный" сценарий:
создаю документ - из файла гружу строки в ТЧ, потом отдельной командой эти строки обрабатываю -по этому сценарию все быстро (отдаю в работу)

что делает пользователь:
создает документ, грузит в него строки из файла, записывает и закрывает документ - открывает и запускает команду на обработку строк - и получает зависон на 1500 сек
звонит мне - и получает рекомендацию - перед исполнением команды "записать" документ

завтра посмотрю - возможно это баг новой платформы 8.3.10
   RomaH
 
16 - 26.11.17 - 23:35
(14) 3 137    1,854233
3137 запросов за 1,85 сек - куда быстрее?
но зато стабильнее
но вместо одной строки кода - 50
   Tateossian
 
17 - 27.11.17 - 01:44
(16) А зачем там сортировка по коду?

И вот этот твой "НайтиСтроки"?
"что делает пользователь: " -->
Программист должен писать такие программы, чтобы учесть все действия пользователя. Если пользователь так делает, значит ваша программа допускает такое поведение.
   RomaH
 
18 - 27.11.17 - 08:03
(17) т.е. ты в курсе того, что без "записать" НайтиСтроки будет работать в 1000 раз дольше?
   RomaH
 
19 - 27.11.17 - 08:12
на 8.3.9 аналогичное поведение
   RomaH
 
20 - 27.11.17 - 08:12
а нет - путаю версии - 
рабочая 8.3.10
тестовая 8.3.11
поведение на обоих одинаковое
   МимохожийОднако
 
21 - 27.11.17 - 08:17
(20) Еще раз... Какая именно процедура даёт зависон? Альтернативу для неё искал? Есть в базе регламентные операции, которые обрабатывают документ после записи?
   RomaH
 
22 - 27.11.17 - 08:20
(21) еще раз - прочитай ветку для начала
еще раз - проблема не в методе, а в том, что метод дает разные результаты в разных ситуациях - скорость меняется в 1000 раз

хотя ситуации вроде бы не должны влиять
   FIXXXL
 
23 - 27.11.17 - 08:22
(18) где выполняется НайтиСтроки() ?
   МимохожийОднако
 
24 - 27.11.17 - 08:23
(22) не увиливай. Ответь еще раз.
   RomaH
 
25 - 27.11.17 - 08:26
(23) клиент
   FIXXXL
 
26 - 27.11.17 - 08:27
(25) этот метод неявно вызывает сервер
соответственно клиентский кэш, поезду туда-сюда и проч. клиент-серверные радости :)



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует