我遇到了SWT樹問題。它包含許多葉子,使得擴展項目非常耗時。有時我甚至需要擴展所有項目。有沒有辦法異步擴展它?我試圖在顯示屏上使用asyncExec()
,把expandAll()
放在run()
的方法中,但它沒有幫助。而且它不能解決我只想擴展一個項目的第一個問題。有任何想法嗎?異步擴展Java SWT樹
附加節點:項目的緩慢擴展只會在我第一次擴展它時發生。之後所有相同項目的擴展(摺疊後)都很快。
我遇到了SWT樹問題。它包含許多葉子,使得擴展項目非常耗時。有時我甚至需要擴展所有項目。有沒有辦法異步擴展它?我試圖在顯示屏上使用asyncExec()
,把expandAll()
放在run()
的方法中,但它沒有幫助。而且它不能解決我只想擴展一個項目的第一個問題。有任何想法嗎?異步擴展Java SWT樹
附加節點:項目的緩慢擴展只會在我第一次擴展它時發生。之後所有相同項目的擴展(摺疊後)都很快。
我通過將內容提供者更改爲ILazyTreeContentProvider
解決了大型樹木的性能問題。如果必須一次性擴展完整樹,這將無濟於事。
替代方案:仔細查看您的內容和標籤提供商。也許他們的操作太昂貴,如果你緩存或預先計算樹的某些信息,你可以加快速度。例如,如果您有一個從數據庫加載項目的正常(非惰性)內容提供者(逐個加載項目),展開該樹將永遠需要 ...
您是否正在加載UI線程中的模型項目?理想情況下,應該在非UI線程中加載模型項目,然後使用UI線程中的項目更新樹。
模型項目被加載到非UI線程中。 – 2011-04-18 12:34:36
好吧,我會看看他們。 – 2011-04-18 10:38:53
我發現問題:CheckStateProvider是瓶頸(使用CheckboxTreeViewer)。該解決方案是一個哈希查找:'treeViewer.setUseHashlookup(true);'但你的答案也是有幫助的。 – 2011-04-18 12:30:47