我实际上有两个问题,但它们有点相关,所以在这里它们是一个......
如何确保对当前未使用TreeViewer
( SWT.VIRTUAL
) 和显示的树节点进行垃圾收集ILazeTreeContentProvider
?如果一个节点有 5000 个子节点,一旦它们被查看器显示,它们就永远不会放手,如果你的树有大量节点和叶子并且堆大小不够大,则会出现内存不足错误。是否有某种最佳实践来避免由于从未关闭的视图持有具有大量数据(数十万个对象甚至数百万个对象)的树查看器而导致的内存泄漏?也许有一些回调接口允许查看器/内容提供者元素具有更大的灵活性?
是否可以将延迟(DeferredTreeContentManager
)和延迟(ILazyTreeContentProvider
)加载组合为单个TreeViewer
(SWT.VIRTUAL
)?据我通过查看示例和 API 了解,只能在给定时间使用任何一个,但不能同时使用两者,例如,仅获取给定节点的可见子节点并使用 Job 在单独的线程中获取它们API。困扰我的是延迟方法会加载所有孩子。尽管在不同的线程中,即使一次只显示最小的子集,它仍然会加载所有元素。
如果需要,我可以为我的问题提供代码示例......
我目前正在与这些人作斗争,所以如果我同时想出一些东西,我很乐意在这里分享。
谢谢!
问候,斯维伦