Этот вопрос касается Java JTree, Window .Net Tree (Winforms) или Adobe Flex Tree.
В клиент-серверном приложении (для Flex это на самом деле Web) у меня есть дерево с иерархическими данными (в интерфейсе типа Windows Explorer). Прямо сейчас я лениво загружаю дерево, поскольку пользователь запрашивает дополнительные данные с сервера. Это нормально и будет работать примерно до 750 тыс. Узлов (эмпирически протестировано на .Net Winforms и Adobe Flex), но после этого все становится медленно. Но базы данных быстро растут (в основном потому, что пользователи могут вставлять огромное количество узлов), и база данных из 20 миллионов узлов вовсе не является маловероятной.
Должен ли я освобождать данные из дерева, когда ветвь свернута, чтобы сборщик мусора мог освободить память? Это нормально, но что, если пользователи неэффективны и не сворачивают ветки? Должен ли я сделать модуль управления памятью, который закрывает ветки, которые давно не трогались?
Похоже, что все это требует большого количества работы, чтобы не исчерпать память.
Редактировать: Должен ли я публиковать данные о коллапсе узла? Если да, то когда? Идея кеширования слабых объектов хороша, но следует ли мне просто продолжать заполнять пользовательский интерфейс, пока он не выйдет из строя (может быть, это неплохая идея)?





в большинстве фреймворков, которые я видел, сама древовидная структура довольно эффективна, но если у вас есть нетривиальный объект на каждом листе дерева, он быстро добавляется.
Самым простым было бы не хранить что-либо в листьях дерева, а в методе render / draw / update / любой другой выбрать свой объект из кеша с слабыми ссылками. если его нет, загрузите с сервера. Уловка состоит в том, чтобы не хранить в кэше никаких других ссылок на объект, а только слабую. Таким образом, он будет по-прежнему доступен, но будет собираться по мере необходимости.
Если пользователи не сворачивают ветки, то, я думаю, они будут прокручивать узлы с 750К до 20М, верно? Мне это кажется довольно неэффективным с точки зрения пользователя. Так что проблема вполне может быть самодостаточной.
Интересный момент. С другой стороны, я думаю о не-древовидных структурах, которые могут сработать. Недавняя работа над PHP в Eclipse убедила меня в том, что сама древовидная структура довольно раздражает для большого количества узлов.
Хорошо, но мой оставшийся вопрос: следует ли мне публиковать данные о коллапсе узла.
Спасибо за ответ. Это интересный момент. В настоящее время я делаю что-то подобное для не-древовидных данных (данных, связанных с узлами).