TreeView Virtualization - PullRequest
       23

TreeView Virtualization

13 голосов
/ 05 января 2011

мы пытаемся найти хороший способ виртуализации TreeView, данные на самом деле не проблема, потому что они очень легкие (около 16 байт на элемент), проблема в том, что у нас могут быть десяткитысяч, и хотя фактические данные занимают всего 160 КБ памяти, элементы древовидной структуры используют намного больше памяти.Мы попробовали виртуализацию с тремя различными деревьями: WPF, Infragistics и Telerik.У всех них есть большие проблемы, которые делают их непригодными для нашего приложения:

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

Telerik : элементы исчезают, полоса прокрутки также ошибочна, элементы произвольно расширяются, стили не работают

Инфраструктура : элементы вообще не виртуализированы, каждый элемент остается в памяти, что делает виртуализацию бесполезной.

Мы боролись с этим пару месяцев назад, и мыне смогли найти хорошее решение.Кто-нибудь из вас успешно реализовал виртуализацию в TreeView с более чем 9000 объектов?Если да, то какова была ваша стратегия?Вы использовали сторонние элементы управления?Это сработало на 100%?

Любое предложение очень ценится.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 05 января 2011

Мы использовали трюк Беа Косты Штольница, заключающийся в том, чтобы делать отступы в ListView и эффективно использовать виртуализацию пользовательского интерфейса.

http://www.beacosta.com/blog/?p=45

Я получил 100 000 элементов в резервной копии ICollectionView, и он все еще довольно чувствителен к фильтрации и т. Д.

2 голосов
/ 05 января 2011

Мы также находимся в аналогичной ситуации, мы пытались использовать Syncfusion tree-view, и это было жалко. Поскольку у нас не было выбора какого-либо другого стороннего элемента управления, и лучшего решения не было, мы наконец-то решили использовать виртуализацию и загрузку по требованию (отложенная загрузка).

Как и в нашем случае, обычно все узлы не будут расширяться в любой момент времени. Это в некоторой степени решает проблемы с прокруткой и делает приложение пригодным для использования в большинстве сценариев. Хотя мы все еще скрещиваем наши цифры и продолжаем искать лучшее решение.

Я хотел бы отметить, что используя как виртуализацию, так и загрузку спрос (ленивая загрузка) вместе есть свои собственные побочные эффекты -

Нужен пример для поиска WPF TreeView с виртуализацией и загрузкой по требованию

.

Некоторые примеры для реализации Load on спрос -

http://www.codeproject.com/KB/WPF/WPF_Explorer_Tree.aspx

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/1eb3ed3d-6379-4353-9f35-2c0aecb885f2/

http://www.telerik.com/help/wpf/radtreeview-features-load-on-demand.html

...