SWT TreeViewer 在填充许多元素时速度很慢

发布于 2024-12-07 10:57:03 字数 388 浏览 1 评论 0 原文

我是java世界的新手,所以如果我的问题很微不足道,我很抱歉。

我正在开发 Eclipse 视图部分,并使用以下数据结构填充 SWT 树视图。所有数据都在内存中:

Node1
   Child1
   Child2
Node2
   Child1
   ...
   Child2915

我认为这不是一棵很大的树,但绘制速度很慢(10秒)。我在 .NET 中管理了包含超过 10,000 个元素的树,并且加载顺利。我不知道我是否已经实现了代码,但是如果我没有调用 BeginUpdate() - EndUpdate(),.NET 中也会出现同样的问题。

我必须在 Java/SWT 中调用类似的东西吗?关于为什么树这么慢还有其他提示吗?

I'm new in the java world, so I'm sorry if my question is trivial.

I'm developing a Eclipse view part, and I'm filling a SWT tree view with the following data structure. All data is in memory:

Node1
   Child1
   Child2
Node2
   Child1
   ...
   Child2915

I think that is not a very big tree, but it is slow being drawn (10 seconds). I have manage trees in .NET with more than 10.000 elements and it loaded smoothly. I don't know if I've implemented the code, but the same problem appeared in .NET if I did not call BeginUpdate() - EndUpdate().

Must I call something similar in Java/SWT? Any other tips about why the tree is so slow?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谜兔 2024-12-14 10:57:03

您可以在创建树时使用 SWT.VIRTUAL 标志来帮助提高性能。

有关详细信息,请参阅 虚拟树和表

这也可以与 JFace TreeViewer 结合使用。有关更多详细信息,请参阅 JFace TreeViewer 上的这篇文章(尽管本文没有具体提及虚拟标志)

You could use the SWT.VIRTUAL flag when creating the Tree to help with the performance

For more information, see this article on Virtual Trees and Tables

This can also be combined with the JFace TreeViewer. See this article on the JFace TreeViewer for more details (although this doesn't specifically mention the virtual flag)

云淡风轻 2024-12-14 10:57:03

最后,我在 TreeViewer 中调用刷新后使用了 setRedraw(boolean value)

public void refresh() {
    try {
        mTreeViewer.getControl().setRedraw(false);
        mTreeViewer.refresh(true);
        mTreeViewer.expandAll();
    }
    finally {
        mTreeViewer.getControl().setRedraw(true);
    }
}

Finally, I used setRedraw(boolean value) after calling refresh in my TreeViewer.

public void refresh() {
    try {
        mTreeViewer.getControl().setRedraw(false);
        mTreeViewer.refresh(true);
        mTreeViewer.expandAll();
    }
    finally {
        mTreeViewer.getControl().setRedraw(true);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文