Доброго дня.
Переношу обработку с обычных форм на управляемые, стараясь сохранить основную логику (что довольно тяжело, оказывается).
Имеется табличная часть обработки и таблица значений.
Так вот я заметил, что сортировка в управляемом приложении невероятно дольше работает!
В обычном за милисекунды отрабатывает.
Притом я пробовал делать это как на сервере, так и на клиенте - везде 2-3 секунды всего лишь для 1000 строк.
Замер производительности показывает, что основное время тратится на серверный вызов и передачу 1000 строк (2+ секунды).
Клиентский вызов Сортировать() для ДанныхФормыКоллекция также делает неявный серверный вызов.
ЧЯДНТ?!
ЗЫ: Передача через временное хранилище ведь тут не нужна? У меня форма одна и я в ней все делаю. Или может внеконтекстный вызов делать... форма тяжёлая...
Переношу обработку с обычных форм на управляемые, стараясь сохранить основную логику (что довольно тяжело, оказывается).
Имеется табличная часть обработки и таблица значений.
Так вот я заметил, что сортировка в управляемом приложении невероятно дольше работает!
В обычном за милисекунды отрабатывает.
Притом я пробовал делать это как на сервере, так и на клиенте - везде 2-3 секунды всего лишь для 1000 строк.
Замер производительности показывает, что основное время тратится на серверный вызов и передачу 1000 строк (2+ секунды).
Клиентский вызов Сортировать() для ДанныхФормыКоллекция также делает неявный серверный вызов.
ЧЯДНТ?!
ЗЫ: Передача через временное хранилище ведь тут не нужна? У меня форма одна и я в ней все делаю. Или может внеконтекстный вызов делать... форма тяжёлая...
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) Там логика сложная и до меня написанная. Сперва заполняется таблица значений, далее что-то с ней делают, и в конце уже сортируют и загружают в ТЧ. ТЗ как вспомогательная и невидима. Но даже если я просто буду сортировать на клиенте саму ТЧ, то разницы в быстродействии никакой.
(6) Я немного о другом.
Даже если у вас ТЗ невидима, она содержит данные и вы ее тащите каждый раз на клиент.
Если вы с ТЗ работаете только на сервере, и она вам нужна только на сервере, храните ее во временном хранилище - адрес хранить в реквизите формы с типом Строка.
То есть заполнили ТЗ на сервере, положили во временное хранилище.
Надо что-то с ТЗ сделать - пошли на сервер, достали из временного хранилища, изменили, положили обратно. Если возможно, то внеконтекстно.
Чем меньше данных в форме, тем быстрее форма будет работать.
Даже если у вас ТЗ невидима, она содержит данные и вы ее тащите каждый раз на клиент.
Если вы с ТЗ работаете только на сервере, и она вам нужна только на сервере, храните ее во временном хранилище - адрес хранить в реквизите формы с типом Строка.
То есть заполнили ТЗ на сервере, положили во временное хранилище.
Надо что-то с ТЗ сделать - пошли на сервер, достали из временного хранилища, изменили, положили обратно. Если возможно, то внеконтекстно.
Чем меньше данных в форме, тем быстрее форма будет работать.
Еще есть такой нюанс, если сортируются значения ссылочного типа, то метод Сортировать таблицы значений (и, подозреваю, табличной части) по умолчанию делает это по представлению. Фактически, это есть запрос в цикле. Заполняйте второй параметр метода – СравнениеЗначений.
От сортировки ТЗ ее смысл не меняется? Тогда зачем вы ее повторно в табличную часть загружаете? Нужно сортировку телать в ТЧ а не в ТЗ.
И у вас нет обработки событий в ТЧ?
ПриИзменении?
ПриАктивизацииСтроки?
и т.д.?
Объект.ЛучшиеПредложения.Сортировать(СписокКолонок);
И у вас нет обработки событий в ТЧ?
ПриИзменении?
ПриАктивизацииСтроки?
и т.д.?
(10) (11) Изначально было вообще вот так:
Приходится работать с этим. Просто сегодня ещё пятница и я подустал, перенёс как есть в УФ, теперь вижу, что нет смысла это делать повторно. ТЗ вообще ещё где-то отдельно сортируется и методом Сортировать() и даже в запросе. Там логика ппц.
Сейчас исправил, оставив лишь сортировку ТЧ. Но это не даёт ответ, почему сортировка на клиенте такая медленная!
Процедура ПоЦенеНажатие(Элемент)
ОсуществляетсяСортировка=Истина;
НТЗЛучшиеПредложения.Сортировать("СортировочныеЗначения, ИскомыйТовар Убыв, ЦенаПродажи");
ЛучшиеПредложения.Очистить();
ЛучшиеПредложения.Загрузить(НТЗЛучшиеПредложения);
ЛучшиеПредложения.Сортировать("СортировочныеЗначения, ИскомыйТовар Убыв, ЦенаПродажи");
КонецПроцедуры
ПоказатьПриходится работать с этим. Просто сегодня ещё пятница и я подустал, перенёс как есть в УФ, теперь вижу, что нет смысла это делать повторно. ТЗ вообще ещё где-то отдельно сортируется и методом Сортировать() и даже в запросе. Там логика ппц.
Сейчас исправил, оставив лишь сортировку ТЧ. Но это не даёт ответ, почему сортировка на клиенте такая медленная!
(21) чем это поможет?
Объект для сравнения значений по правилам, совпадающим с правилами сравнения значений в базе:
Элементы, чьи типы не совпадают, сравниваются по коду типа;
Элементы простых типов сравниваются по значению;
Объекты сравниваются по идентификатору;
Моменты времени сравниваются по дате и идентификатору объекта;
Элементы остальных типов сравниваются по строковому представлению.
Элементы, чьи типы не совпадают, сравниваются по коду типа;
Элементы простых типов сравниваются по значению;
Объекты сравниваются по идентификатору;
Моменты времени сравниваются по дате и идентификатору объекта;
Элементы остальных типов сравниваются по строковому представлению.
(24) если бы что-то сложное и ресурсоемкое было в ОбработкаПолученияПредставления, то это сказывалось бы на каждом открытии списка номенклатуры, в том числе и при выборе. Думаю это сразу бы заметили.
А получение текстового представления из базы так же будет отрабатывать и в 8.2 при сортировке.
А получение текстового представления из базы так же будет отрабатывать и в 8.2 при сортировке.
Значит зря ТЗ включили в состав объекта.
Поместите во временное хранилище и используйте только на стороне сервера не гоняя ее туда сюда с клиента на сервер и обратно.
А в составе формы храните только строку АдресХранилища.
Поместите во временное хранилище и используйте только на стороне сервера не гоняя ее туда сюда с клиента на сервер и обратно.
А в составе формы храните только строку АдресХранилища.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот