EhLibSupport писал(а):
использовать классический код обновления фильтра
Код:
Detail1MemTableEh.Refresh;
// Detail1MemTableEh.Filtered должен быть = True
Честно говоря впервые слышу, что бы Refresh был классическим кодом обновления фильтра, хотя работаю с Delphi начиная еще с Delphi1.
Ну да ладно. В атаче новая демка с замерами скорости.
Перед каждым замером демку запускаем заново и при необходимости комментирую перефильтрацию или Refresh или очищаю/устанавливаю SortOrder.
1)
- с перефильтрацией и сортировкой: время работы: 00:09:25
- с Refresh и сортировкой: время работы: 00:03:01
- с перефильтрацией и без сортировки: время работы: 00:00:13
- с Refresh и без сортировки: время работы: 00:00:11
Из приведенных выше замеров видно, что хотя и Refresh у MTE работает быстрее перефильтрации, но все равно гораздо медленнее, чем без сортировки.
То есть MemTableEh все равно нуждается в исправлении этих тормозов.
2)
Меняем MemTableEh на FDMemTable (FireDAC из поставки Delphi 10.2.3). Все параметры FDMemTable оставляем по умолчанию.
Весь код остается прежний, только вместо SortOrder используем свойство IndexFieldNames.
- с перефильтрацией и сортировкой: время работы: 00:00:08
- с Refresh и сортировкой: время работы: 00:01:12
Из приведенных выше замеров видно:
а) FDMemTable с сортировкой существенно быстрее, чем MemTabeEh. Это еще раз говорит, что MemTabeEh весьма нуждается в ускорении и исправлении этих тормозов.
б) Метод Refresh в случае с FDMemTable оказался заметно медленнее обычной перефильтрации (что на мой взгляд ставит под сомнение, что он является
"классическим кодом обновления фильтра"), но даже в этом случае он почти в три раза быстрее чем MemTableEh.