2

在我的项目中,我有一个TableViewer显示来自数据库的大约 1k 行数据。是ContentProvider一个ArrayContentProvider.

当我将输入列表(对象)更改为具有相同数据量的另一个列表时,一切正常setInput()TableViewer但是当我想用List<T>与前一个不同的大小来更新它时,应用程序冻结了大约 10 倍于使用相同数据量进行更改的时间。

第一个列表的大小为 1k,第二个列表的大小约为 960。执行直接冻结在setInput()方法上。

有人知道为什么会这样吗?

4

1 回答 1

1

我认为原因是当您设置不同大小的列表时,会重新创建整个原生 TableItems。因此,为了加快您的表格速度,您应该使用 SWT.Virtual 样式表格。使用虚拟表只创建显示的表项。其他是在您滚动时创建的。

http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers /Snippet029VirtualTableViewer.java为例。

于 2012-11-06T07:49:33.123 回答