Правила Форума редакция от 22.06.2020 |
|
|
|
|
|
Опции темы | Опции просмотра | Language |
02.03.2016, 14:38 | #1 |
Неактивный пользователь
Пол: Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
|
как ускорить построение дерева MemTableEh + DBGridEh
Доброго времени суток.
Подскажите, кто знает. Строю дерево с помощью MemTableEh + DbGridEh классическим способом. Т.е. ADOQuery + DataSetDriverEh (дерево "константное", т.е. все модификации данных через базу) + MemTableEh + DataSouerce + DBGridEh. Все стандартным способом как по мануалу. Все работает отлично. НО!!! Дерево оказалось с 18к узлов. И дерево строится под минуту. Насколько я понимаю - для построения используется ресурс локальной машины, т.е. на более слабом ПК это будет еще дольше. Кто знает варианты ускорения данной цепочки. Есть вариант - руками через TreeView (подгружать дочерние узлы в момент раскрытия), но потеряются фильтры, сортировки такие удобные в гриде. Кто что посоветует? |
Реклама: | билеты на мосфильм | купить тумбы прикроватные | синхронизация Zoom | барнхаус 6х6 | промышленное кресло |
19.06.2016, 00:02 | #2 |
Новичок
Пол: Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
Вечер добрый.
Ну вроде деревья все так и подгружают - TTreeView, VirtualTreeView. Зачем все 18к узлов вываливать? Я по работе пытался сразу около 3,5к вывалить, с загрузкой объектов в Node.Data... тормозило. Потом покурили форумы, продумали... а зачем юзеру столько и сразу?! |
19.06.2016, 13:19 | #3 |
Неактивный пользователь
Пол: Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
для того что бы Search делать по дереву, сортировку и т.д.
Дерево представляется из себя - дерево таможенных кодов. Соотв. нужно или переписывать поиск стандартный, или грузить целиком |
25.06.2016, 03:30 | #4 |
Новичок
Пол: Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
Сколько уровней имеет дерево (более 2-х)? Вы сразу все узлы открываете?
|
26.06.2016, 13:06 | #5 |
Неактивный пользователь
Пол: Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
Кол-во узлов динамическое. Т.е. все зависит от данных, сейчас вложенность для некоторых веток до 5-ти, но в теории может быть любая.
Открываю не все узлы. В теории можно было бы рисовать только родительские, и на onExpand дорисовывать дочерние, но тогда не будет работать поиск родной. А делать поиск отдельно и дорисовывать найденные узлы - не очень хочется |
27.06.2016, 12:42 | #6 |
Новичок
Пол: Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
Попробовал загрузить 10к... действительно долго, 1к грузится быстро.
Что сразу приходит на ум - разбить на отдельные справочники, если это возможно. Добавить в БД еще одно поле - код справочника и пронумеровать корневые узлы, потом в селекте выбирать нужные справочники. |
27.06.2016, 13:06 | #7 |
Неактивный пользователь
Пол: Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
проблема, как я понимаю, не в селекте, а в отрисовке дерева в DBGridEh
потому как селекты и все дела проходят быстро, а вот на "onDrawTree" у грида идет задержка |
27.06.2016, 13:43 | #8 |
Новичок
Пол: Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
сделал тест: разбил весь процесс загрузки на 3 этапа.
1 - выполнял селект, 2 - делал MemTableEh.LoadFromDataSet(...), 3- подключал к DBGridEh DataSource, у MemTableEh - FetchAllOnOpen выставлял в False результат: самое долгое, это MemTableEh.LoadFromDataSet(...), остальное пулей! MemTableEh пытается у себя дерево строить, что и занимает время на больших объемах |
27.06.2016, 14:33 | #9 |
Неактивный пользователь
Пол: Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
хм. я тестился не так. Я делал memtable open - это отрабатывало влет.
а вот когда я открывал форму и Grid'а отрисовывал данные - тогда основная задержка и шла |
27.06.2016, 14:45 | #10 |
Новичок
Пол: Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
а в memtable данные у вас как попадают?
поля там уже определены и Вы по ADOQuery бегаете и добавляете записи? |
27.06.2016, 14:46 | #11 |
Неактивный пользователь
Пол: Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
через классическую связку AdoQuery+dataprovider+memtableeh+dbgrideh
поля уже определены, т.е. таблица чисто вытягивает данные из запроса сама. соотв ключи для дерева тоже предзабиты |
27.06.2016, 14:53 | #12 |
Новичок
Пол: Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
Можно еще вариант попробовать...
У memtableeh свойство TreeList.Active делаете False, а после загрузки записей меняете это свойство на True, должно немного быстрее быть, т.к. данные в memtableeh уже есть |
27.06.2016, 14:54 | #13 |
Неактивный пользователь
Пол: Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
ок. спасибо, проверю
|
27.06.2016, 14:58 | #14 |
Новичок
Пол: Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
|
Re: как ускорить построение дерева MemTableEh + DBGridEh
Конечно, на мой взгляд, правильнее было порезать на более мелкие фрагменты дерево )) и загружать разными справочниками.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TreeView (MemTableEh + DBGridEh) | Litvinenko_A | Delphi | 0 | 29.02.2016 15:09 |
DBGridEh и OnMouseWheel | Mironico | Delphi | 2 | 19.08.2010 08:02 |
C++Builder6 DBGRIDEH как установить фокус на любую ячейку GRID | vereshak | Borland C++ Builder | 3 | 03.08.2010 21:05 |
ADOQuery + DBGridEh | Litvinenko_A | Delphi | 8 | 01.12.2009 14:48 |
как представить информацию, кроме как в виде бинарного дерева? | Tuco | Скорая помощь | 2 | 16.03.2009 15:05 |
|
|