2011-04-18 81 views
0


我遇到了SWT树问题。它包含许多叶子,使得扩展项目非常耗时。有时我甚至需要扩展所有项目。有没有办法异步扩展它?我试图在显示屏上使用asyncExec(),把expandAll()放在run()的方法中,但它没有帮助。而且它不能解决我只想扩展一个项目的第一个问题。有任何想法吗?异步扩展Java SWT树

附加节点:项目的缓慢扩展只会在我第一次扩展它时发生。之后所有相同项目的扩展(折叠后)都很快。

回答

2

我通过将内容提供者更改为ILazyTreeContentProvider解决了大型树木的性能问题。如果必须一次性扩展完整树,这将无济于事。

替代方案:仔细查看您的内容和标签提供商。也许他们的操作太昂贵,如果你缓存或预先计算树的某些信息,你可以加快速度。例如,如果您有一个从数据库加载项目的正常(非惰性)内容提供者(逐个加载项目),展开该树将永远需要 ...

+0

好吧,我会看看他们。 – 2011-04-18 10:38:53

+0

我发现问题:CheckStateProvider是瓶颈(使用CheckboxTreeViewer)。该解决方案是一个哈希查找:'treeViewer.setUseHashlookup(true);'但你的答案也是有帮助的。 – 2011-04-18 12:30:47

0

您是否正在加载UI线程中的模型项目?理想情况下,应该在非UI线程中加载模型项目,然后使用UI线程中的项目更新树。

+0

模型项目被加载到非UI线程中。 – 2011-04-18 12:34:36