![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Softaz |
|
|||
![]() wasm ![]() ![]() Профиль Группа: Участник Сообщений: 373 Регистрация: 16.1.2006 Репутация: 3 Всего: 16 |
Вот мой код:
Файл БД взят из DOTNET_Browser: http://forum.vingrad.ru/topic-104564/0.html (3-я и последующие версии). Скорость примерно 2500 Нод за 18 секунд. Если эта скорость нормальна, то все в порядке. В принципе, наверное, будет быстрее, если сначала загрузить в DataSet все, а потом из него брать (из памяти, а не из файла БД), но у меня скорость практически не изменилась. Склейка SQL-запросов пусть останется - не пинайте. Думаю, данные строго типизированы.
Это сообщение отредактировал(а) Softaz - 9.11.2006, 20:45 -------------------- Разочарованный в .NET |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 5 Всего: 186 |
это ещё зачем? Попробуй без него Добавлено @ 21:01 Ну и ещё неплохо вызывать SQL в отдельном потоке (если он тормозит). |
|||
|
||||
| Softaz |
|
|||
![]() wasm ![]() ![]() Профиль Группа: Участник Сообщений: 373 Регистрация: 16.1.2006 Репутация: 3 Всего: 16 |
Чтобы можно было работать с формой в момент загрузки дерева. Тред не стал делать, потому что хотел быстрее испытать алгоритм. Быстрее на четверть, но приходится ждать, пока дерево полностью не загрузится. Можно, конечно, загружать сначала только корневые ноды, а в обработчике события Expand проверять, загружены ли Child-ноды и, если нет, подгружать к выбранной корневой остальное и т.д. и т.п., но я видел загрузку всего дерева намного быстрей представленной. Да и организовать тупую загрузку всего дерева на вид проще. -------------------- Разочарованный в .NET |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Softaz, рекомендация одна: не добавлять в дерево узлы сразу, т.е. сначала грузить во временную структуру, а потом - всем скопом добавлять в дерево. Проверить справедливость этого очень просто: убрать из кода всё что так или иначе связано с TreeView и добавлять к примеру, в Dictionary. Кроме того, зачем грузить всё сразу ? Если можно в рамках задачи, то намного экономнее подгружать данные по ходу раскрытия узлов дерева (BeforeExpand на то и придуман)... извините за банальность, дерево ведь дерево а не список.
-------------------- ![]() |
|||
|
||||
| Softaz |
|
|||
![]() wasm ![]() ![]() Профиль Группа: Участник Сообщений: 373 Регистрация: 16.1.2006 Репутация: 3 Всего: 16 |
Мне кажется, что еще одно узкое место - запрос в БД. Вот следующий код загружает около 2500 тыщ нод за 2 секунды. Соответственно, нужно придумать, как быстро сортировать данные.
-------------------- Разочарованный в .NET |
|||
|
||||
| Softaz |
|
|||
![]() wasm ![]() ![]() Профиль Группа: Участник Сообщений: 373 Регистрация: 16.1.2006 Репутация: 3 Всего: 16 |
Так оно и было.
Буду подгружать дерево по BeforeExpand. Это оказывается намного проще. -------------------- Разочарованный в .NET |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 3 Всего: 93 |
угу. +использовать умное удаление. т. е.
удалять большие ноды на AfterCollapse и использовать e.Node.Tag для определения загруженна ли ветка. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Тут похитрее придётся делать: чтобы ветку можно было раскрывать, т.е. чтобы появился "плюсик", нужно добавлять ноду-пустышку (которую мы отличим по ссылке, или по Tag-у), при раскрытии узла в BeforeExpand проверять - есть ли под ним пустышка или нет. Если есть - удалять её и наполнять узлами по запросу БД. Добавлено @ 09:00 З.Ы. вопрос вообще говоря, в WinForms -------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |