У меня есть на самом деле два вопроса, но они отчасти связаны с тем здесь они идут как один ...Ленивые и отложенным TreeViewer вопросы
Как обеспечить вывоз мусора из узлов дерева, которые в настоящее время не отображается с помощью TreeViewer
(SWT.VIRTUAL
) и ILazeTreeContentProvider
? Если у узла есть 5000 детей, как только они будут отображаться зрителем, они никогда не будут отпущены, , следовательно, Ошибка в памяти, если ваше дерево имеет большое количество узлов и листьев и не достаточно большой размер кучи. Есть ли какая-то лучшая практика, как избежать утечек памяти, вызванных никогда закрытым представлением, содержащим treeviewer с большим количеством данных (сотни тысяч объектов или даже миллионов)? Возможно, возможно, есть какой-то интерфейс обратного вызова, который обеспечивает большую гибкость в отношении элементов-провайдеров/контент-провайдеров?
Можно ли совместить deffered (DeferredTreeContentManager
) и ленивая (ILazyTreeContentProvider
) загрузки для одного TreeViewer
(SWT.VIRTUAL
)? Насколько я понимаю, глядя на примеры и API, можно использовать только один в заданное время, но не оба вместе, например. , Извлечь ТОЛЬКО видимых дочерних элементов для заданного узла И получить их в отдельном потоке с помощью Job API. Меня беспокоит то, что отложенный подход загружает ВСЕ детей. Хотя в другом потоке вы все равно загружаете все элементы , хотя одновременно отображается только минимальное подмножество.
Я могу привести примеры кода на мои вопросы, если требуется ...
Я в настоящее время борюсь с теми себя так, если мне удастся придумать что-то в то же время я с удовольствием поделюсь здесь.
Спасибо!
С уважением, Svilen
для ленивой загрузки, зрители сообщают провайдеру, что будет отображаться конкретный элемент (из-за прокрутки или расширения). текущие отложенные реализации могут быть легко достигнуты с использованием задания в методах поставщика контента. проблема с обоими методами, почему они могут быть эксклюзивными: ленивая загрузка предполагает, что вы знаете количество элементов заранее и заменяет содержимое зрителя за время отображения содержимого. вы не хотите загружать контент (например, из ресурса remore), каждый раз, когда пользователь прокручивает или расширяет что-то. – benez