Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжёлое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
PayPal PayPal_Email E-mail для связи по вопросу помощи
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра Language
Старый 02.03.2016, 14:38   #1
Неактивный пользователь
 
Пол:Мужской
Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
По умолчанию как ускорить построение дерева MemTableEh + DBGridEh

Доброго времени суток.
Подскажите, кто знает. Строю дерево с помощью MemTableEh + DbGridEh классическим способом. Т.е. ADOQuery + DataSetDriverEh (дерево "константное", т.е. все модификации данных через базу) + MemTableEh + DataSouerce + DBGridEh. Все стандартным способом как по мануалу. Все работает отлично. НО!!!

Дерево оказалось с 18к узлов. И дерево строится под минуту. Насколько я понимаю - для построения используется ресурс локальной машины, т.е. на более слабом ПК это будет еще дольше. Кто знает варианты ускорения данной цепочки.

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

Кто что посоветует?
Litvinenko_A вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: билеты на мосфильмкупить тумбы прикроватныесинхронизация Zoomбарнхаус 6х6промышленное кресло


Старый 19.06.2016, 00:02   #2
as2714
Новичок
 
Пол:Мужской
Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

Вечер добрый.
Ну вроде деревья все так и подгружают - TTreeView, VirtualTreeView. Зачем все 18к узлов вываливать?

Я по работе пытался сразу около 3,5к вывалить, с загрузкой объектов в Node.Data... тормозило.
Потом покурили форумы, продумали... а зачем юзеру столько и сразу?!
as2714 вне форума
 
Ответить с цитированием Вверх
Старый 19.06.2016, 13:19   #3
Litvinenko_A
Неактивный пользователь
 
Пол:Мужской
Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

для того что бы Search делать по дереву, сортировку и т.д.
Дерево представляется из себя - дерево таможенных кодов. Соотв. нужно или переписывать поиск стандартный, или грузить целиком
Litvinenko_A вне форума
 
Ответить с цитированием Вверх
Старый 25.06.2016, 03:30   #4
as2714
Новичок
 
Пол:Мужской
Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

Сколько уровней имеет дерево (более 2-х)? Вы сразу все узлы открываете?
as2714 вне форума
 
Ответить с цитированием Вверх
Старый 26.06.2016, 13:06   #5
Litvinenko_A
Неактивный пользователь
 
Пол:Мужской
Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

Кол-во узлов динамическое. Т.е. все зависит от данных, сейчас вложенность для некоторых веток до 5-ти, но в теории может быть любая.

Открываю не все узлы. В теории можно было бы рисовать только родительские, и на onExpand дорисовывать дочерние, но тогда не будет работать поиск родной. А делать поиск отдельно и дорисовывать найденные узлы - не очень хочется
Litvinenko_A вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 12:42   #6
as2714
Новичок
 
Пол:Мужской
Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

Попробовал загрузить 10к... действительно долго, 1к грузится быстро.
Что сразу приходит на ум - разбить на отдельные справочники, если это возможно.
Добавить в БД еще одно поле - код справочника и пронумеровать корневые узлы, потом в селекте выбирать нужные справочники.
as2714 вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 13:06   #7
Litvinenko_A
Неактивный пользователь
 
Пол:Мужской
Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

проблема, как я понимаю, не в селекте, а в отрисовке дерева в DBGridEh
потому как селекты и все дела проходят быстро, а вот на "onDrawTree" у грида идет задержка
Litvinenko_A вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 13:43   #8
as2714
Новичок
 
Пол:Мужской
Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

сделал тест: разбил весь процесс загрузки на 3 этапа.
1 - выполнял селект, 2 - делал MemTableEh.LoadFromDataSet(...), 3- подключал к DBGridEh DataSource, у MemTableEh - FetchAllOnOpen выставлял в False

результат: самое долгое, это MemTableEh.LoadFromDataSet(...), остальное пулей!
MemTableEh пытается у себя дерево строить, что и занимает время на больших объемах
as2714 вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 14:33   #9
Litvinenko_A
Неактивный пользователь
 
Пол:Мужской
Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

хм. я тестился не так. Я делал memtable open - это отрабатывало влет.
а вот когда я открывал форму и Grid'а отрисовывал данные - тогда основная задержка и шла
Litvinenko_A вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 14:45   #10
as2714
Новичок
 
Пол:Мужской
Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

а в memtable данные у вас как попадают?
поля там уже определены и Вы по ADOQuery бегаете и добавляете записи?
as2714 вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 14:46   #11
Litvinenko_A
Неактивный пользователь
 
Пол:Мужской
Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

через классическую связку AdoQuery+dataprovider+memtableeh+dbgrideh
поля уже определены, т.е. таблица чисто вытягивает данные из запроса сама. соотв ключи для дерева тоже предзабиты
Litvinenko_A вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 14:53   #12
as2714
Новичок
 
Пол:Мужской
Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

Можно еще вариант попробовать...
У memtableeh свойство TreeList.Active делаете False, а после загрузки записей меняете это свойство на True, должно немного быстрее быть, т.к. данные в memtableeh уже есть
as2714 вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 14:54   #13
Litvinenko_A
Неактивный пользователь
 
Пол:Мужской
Регистрация: 19.06.2008
Сообщений: 95
Репутация: 1
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

ок. спасибо, проверю
Litvinenko_A вне форума
 
Ответить с цитированием Вверх
Старый 27.06.2016, 14:58   #14
as2714
Новичок
 
Пол:Мужской
Регистрация: 15.10.2013
Сообщений: 9
Репутация: 0
По умолчанию Re: как ускорить построение дерева MemTableEh + DBGridEh

Конечно, на мой взгляд, правильнее было порезать на более мелкие фрагменты дерево )) и загружать разными справочниками.
as2714 вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 20:20. Часовой пояс GMT +3.


Copyright ©2004 - 2024 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.17786 секунды с 13 запросами