Доброго дня.
Переношу обработку с обычных форм на управляемые, стараясь сохранить основную логику (что довольно тяжело, оказывается).

Имеется табличная часть обработки и таблица значений.

Так вот я заметил, что сортировка в управляемом приложении невероятно дольше работает!
В обычном за милисекунды отрабатывает.
Притом я пробовал делать это как на сервере, так и на клиенте - везде 2-3 секунды всего лишь для 1000 строк.
Замер производительности показывает, что основное время тратится на серверный вызов и передачу 1000 строк (2+ секунды).
Клиентский вызов Сортировать() для ДанныхФормыКоллекция также делает неявный серверный вызов.

ЧЯДНТ?!
ЗЫ: Передача через временное хранилище ведь тут не нужна? У меня форма одна и я в ней все делаю. Или может внеконтекстный вызов делать... форма тяжёлая...
---
Как оказалось - это нормальное поведение управляемого приложения.
Возьмите любой документ с множеством количеством строк и убедитесь, что сортировка по любому полю будет занимать более 2 секунд :)
При том, не важно какой клиент (веб, толстый или тонкий).
---
Клиентский вызов Сортировать() для ДанныхФормыКоллекция также делает неявный серверный вызов. Интересно, а если сделать алгоритмическую сортировку на клиенте, будет ли быстрее.
---
тоже стало интересно; а как ссылочные типы сравнивать, по идентификатору?
---
Можно попробовать воспользоваться методом списка значений СортироватьПоЗначению. Вроде бы не делает серверный вызов.
---
У вас есть и реквизит формы таблица значений и табличная часть в объекте, судя по коду с одинаковыми значениями, а зачем? Они обе на форме отображаются для работы?
---
Там логика сложная и до меня написанная. Сперва заполняется таблица значений, далее что-то с ней делают, и в конце уже сортируют и загружают в ТЧ. ТЗ как вспомогательная и невидима. Но даже если я просто буду сортировать на клиенте саму ТЧ, то разницы в быстродействии никакой.
---
Я немного о другом.
Даже если у вас ТЗ невидима, она содержит данные и вы ее тащите каждый раз на клиент.
Если вы с ТЗ работаете только на сервере, и она вам нужна только на сервере, храните ее во временном хранилище - адрес хранить в реквизите формы с типом Строка.
То есть заполнили ТЗ на сервере, положили во временное хранилище.
Надо что-то с ТЗ сделать - пошли на сервер, достали из временного хранилища, изменили, положили обратно. Если возможно, то внеконтекстно.

Чем меньше данных в форме, тем быстрее форма будет работать.
---
нуу... у меня слишком много обращений к этой ТЗ. И никакое временное хранилище тут не оптимизирует клиент-серверные вызовы. Не хочу ковыряться в этом.
Вообще речь сейчас про сортировку ТЧ =)
---
Вы просто еще ТЗ тоже сортируете, и она потом едет на клиент, что тоже может влияет на общее время.
---
Еще есть такой нюанс, если сортируются значения ссылочного типа, то метод Сортировать таблицы значений (и, подозреваю, табличной части) по умолчанию делает это по представлению. Фактически, это есть запрос в цикле. Заполняйте второй параметр метода – СравнениеЗначений.
---
От сортировки ТЗ ее смысл не меняется? Тогда зачем вы ее повторно в табличную часть загружаете? Нужно сортировку телать в ТЧ а не в ТЗ.

```1c
    Объект.ЛучшиеПредложения.Сортировать(СписокКолонок);
```

И у вас нет обработки событий в ТЧ?
ПриИзменении?
ПриАктивизацииСтроки?
и т.д.?
---
И у вас нет обработки событий в ТЧ?
ПриИзменении?
ПриАктивизацииСтроки?
и т.д.?
Нету
---
(11) Изначально было вообще вот так:

```1c
    Процедура ПоЦенеНажатие(Элемент)

    ОсуществляетсяСортировка=Истина;
    НТЗЛучшиеПредложения.Сортировать("СортировочныеЗначения, ИскомыйТовар Убыв, ЦенаПродажи");
    ЛучшиеПредложения.Очистить();
    ЛучшиеПредложения.Загрузить(НТЗЛучшиеПредложения);
    ЛучшиеПредложения.Сортировать("СортировочныеЗначения, ИскомыйТовар Убыв, ЦенаПродажи");

    КонецПроцедуры
```

Приходится работать с этим. Просто сегодня ещё пятница и я подустал, перенёс как есть в УФ, теперь вижу, что нет смысла это делать повторно. ТЗ вообще ещё где-то отдельно сортируется и методом Сортировать() и даже в запросе. Там логика ппц.

Сейчас исправил, оставив лишь сортировку ТЧ. Но это не даёт ответ, почему сортировка на клиенте такая медленная!
---
А реквизиты через точку в таблицу не выведены?
---
Нет, а по ним и сортировка невозможна в принципе.
---
Очень многие делают замечание про повторную сортировку. Исправил! Ничего не изменилось - 2 секунды сортировка.
---
почему сортировка на клиенте такая медленная!
(14) Ничего не изменилось - 2 секунды сортировка.
Так это не чистое время сортировки. Передача данных формы на сервер и обратно (в том числе сериализация/десериализация) занимают большую часть времени.
---
Попробуйте так на клиенте:
```1c
    Объект.ЛучшиеПредложения.Сортировать("СортировочныеЗначения, ИскомыйТовар Убыв, ЦенаПродажи", "СравнениеЗначений");
```
---
Вызов метода выполняет обращение к серверу.
---
Это понятно. Суть оптимизации объяснена в (8). Трактовать время неявного серверного вызова (2 секунды) можно по-разному. Это необязательно расходы на передачу данных формы, в него также входит время получения представления на сервере и сама сортировка.
---
чем это поможет?
Объект для сравнения значений по правилам, совпадающим с правилами сравнения значений в базе:
Элементы, чьи типы не совпадают, сравниваются по коду типа;
Элементы простых типов сравниваются по значению;
Объекты сравниваются по идентификатору;
Моменты времени сравниваются по дате и идентификатору объекта;
Элементы остальных типов сравниваются по строковому представлению.
---
Тем, что сравнение будет по значению, а не по представлению.
(23) Без понятия. Но, например, тем, что в обычных формах в 8.2 в принципе не предполагается ОбработкаПолученияПредставления.
---
если бы что-то сложное и ресурсоемкое было в ОбработкаПолученияПредставления, то это сказывалось бы на каждом открытии списка номенклатуры, в том числе и при выборе. Думаю это сразу бы заметили.
А получение текстового представления из базы так же будет отрабатывать и в 8.2 при сортировке.
---
и чем отличается сортировка на сервере в УФ от сортировки в толстом клиенте обычного приложения? Так что сомнительно что получение строкового представления на что-то сильно влияет.
---
СравнениеЗначений
Никакой разницы. И по замерам нет разницы, сортировка по простым типам колонок или ссылочным.
В общем, если явно на сервере сортировать, то 3 секунды, если на клиенте (с неявным вызовов сервера) - 1.5-2.
И это всего лишь на 1000 строк.
---
Значит зря ТЗ включили в состав объекта.
Поместите во временное хранилище и используйте только на стороне сервера не гоняя ее туда сюда с клиента на сервер и обратно.
А в составе формы храните только строку АдресХранилища.
---
Как оказалось - это нормальное поведение управляемого приложения.
Возьмите любой документ с множеством количеством строк и убедитесь, что сортировка по любому полю будет занимать более 2 секунд :)
При том, не важно какой клиент (веб, толстый или тонкий).