Как быстро отобразить большое количество данных - PullRequest
0 голосов
/ 13 сентября 2009

У меня есть большая таблица базы данных, которую нужно отобразить в форме Windows. Данные - это своего рода «список категорий», который мне нужно отобразить пользователю в древовидной структуре, есть категории с большим количеством подкатегорий. Элемент управления TreeView загружается с задержкой, но проблема в том, что могут быть сотни тысяч корневых узлов со значениями строки 4 столбцов. Я попытался добавить 100000 узлов в древовидную структуру, и это заняло 5 минут. Есть ли другие варианты такой операции? Можете ли вы дать мне какие-либо идеи? не имеет вида дерева.

Ответы [ 5 ]

2 голосов
/ 13 сентября 2009

Это много узлов, но вы пытались вызвать BeginUpdate (), а затем EndUpdate (), когда добавили список узлов в древовидную структуру? Возможно, это немного повысит вашу производительность!

http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beginupdate.aspx

В таких приложениях я склонен реализовывать такие функции, как «поиск по мере ввода», которые возвращали бы имена категорий по мере их ввода в текстовое поле. Например, при каждом нажатии клавиши я бы возвращался в БД и возвращал первые 10 или около того значений, которые начинаются с того, что находится в текстовом поле. Если результатов более 10, я либо указываю, что больше результатов, либо говорю им, чтобы они уточнили свой поиск. Прямой поиск в IMO всегда важнее сортировки и / или подкачки. Я ненавижу пейджинг. Почти всегда признается, что ваша функция поиска недостаточно хороша!

1 голос
/ 13 сентября 2009

TreeView имеет событие BeforeExpand. Вы можете использовать его для оперативного определения содержимого узла для загрузки. То есть сначала вы загружаете только узлы верхнего уровня в TreeView.

Если пользователь собирается расширить узел, вы можете получить необходимые данные и заполнить подузлы этого узла. Используйте свойство Tag TreeNode для хранения идентификатора, данные которого принадлежат какому узлу.

Обязательно используйте BeginUpdate () и EndUpdate () или используйте AddRange () вместо Add () для добавления узлов, потому что это намного быстрее.

1 голос
/ 13 сентября 2009

Вы можете использовать возможности кеша. 20000 записей обычно загружаются за 0,2 с. Проверьте вашу языковую поддержку, чтобы использовать ее.

С уважением,

1 голос
/ 13 сентября 2009

Возможно, реализовать какой-то механизм подкачки. 100 000 элементов в TreeView будет очень трудно читать с точки зрения пользователя. Предоставление только 1000 или даже меньше корневых узлов за раз, безусловно, сократит время загрузки.

0 голосов
/ 14 сентября 2009

Я решил реализовать виртуальный / серверный режим для дерева.

Спасибо за ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...