Создание объектов, управляемых базой данных для заполнения Treeview - очень медленно - PullRequest
2 голосов
/ 11 сентября 2008

У меня есть приложение, которое читает таблицу из базы данных.

Я выдаю SQL-запрос для получения набора результатов, основываясь на уникальном строковом значении, которое я получаю из результатов, и использую оператор case / switch для генерации определенных объектов (они наследуют TreeNode BTW). Эти созданные объекты шунтируются в объект Dictionary, который будет использоваться позже.

При создании этих объектов я использую некоторые значения из результирующего набора для заполнения значений в объекте через установщики.

Я запрашиваю в словаре возвращаемый объект определенного типа и использую его для заполнения древовидной структуры. Однако невозможно заполнить 2 объекта одного и того же типа в древовидной структуре из объекта Dictionary (вы получаете ошибку времени выполнения, которая в настоящий момент ускользает от меня, что-то вроде ссылки на один и тот же объект). Поэтому мне нужно использовать memberwiseClone и реализовать IClonable, чтобы обойти это.

Я правильно делаю? Есть ли лучший способ - потому что я думаю, что это заставляет мою программу быть очень медленной в этот момент. По крайней мере, я думаю, что это немного неуклюже - любые советы от людей, которые знают больше меня - очень ценятся.

Ответы [ 3 ]

2 голосов
/ 11 сентября 2008

Есть ли причина, по которой вы используете внешний словарь? Я бы заполнил дерево напрямую при запросе данных.

Если вам требуется словарь, вы можете установить свойство .Tag узла дерева, чтобы оно указывало на данные в вашем словаре.

1 голос
/ 11 сентября 2008

Чтобы добавить к @ Брэду , заполните только дерево по мере необходимости. Это означает подключение к событию расширения узлов дерева. Это похоже на то, как работает Windows Explorer при работе с сетевыми папками.

Должен быть 1 TreeNode объект на фактический узел дерева в дереве - не пытайтесь повторно использовать вещи. Вы можете связать их со своими данными, используя свойство Tag (это рекомендуемый метод), или вы можете создать подкласс самого TreeNode (это метод Java, но он используется в .NET меньше).

(Использование методов клонирования обычно является намеком на то, что вы либо (а) делаете что-то не так, либо (б) нужно учитывать вашу модель предметной области для отделения изменяемых объектов от неизменяемых.)

0 голосов
/ 03 октября 2010

Рассматривали ли вы использование представления виртуального дерева, которое загружает только те узлы, на которые пользователь действительно хочет посмотреть - у меня был хороший успех с компонентом с www.infralution.com

...