3

我正在使用 Eclipse RCP (4) 编写一个小尾巴应用程序。在我的主窗口中,我希望显示文件的内容。我的第一个想法是使用 SWTList组件,但我的问题是当我打开一个非常大的文件(超过 100000 行)List时无法处理它。您知道我应该为此使用哪个组件吗?

我想根据某些条件过滤和/或突出显示记录,但我不想修改,所以它是只读的。

还有一件事:由于我无法将任意大(例如 10 GB)的文件加载到内存中,我只需将换行符的位置读入 a中,并且仅在要显示List具体行时将其加载到 a中。String所以我需要一些组件,它只在线条变得可见时才呈现线条。

4

1 回答 1

0

可以使用SWT.VIRTUAL, 这样就可以实现数据的延迟加载。 是一个使用 Table 和 SWT.VIRTUAL 的示例。

然而10GB是很多信息。我会以某种方式将文件分成许多块并加载它的特定部分。

[编辑]:你应该知道的事情:

从 3.1 开始,TableViewer 现在支持 SWT.VIRTUAL 标志。如果基础表是 SWT.VIRTUAL,则内容提供者可以实现 ILazyContentProvider 而不是 IStructuredContentProvider。请注意,在这种情况下,查看器不支持排序或过滤。另请注意,在这种情况下,如果元素未指定或尚未创建,则基于 Widget 的 API 可能会返回 null。

SWT.VIRTUAL 的用户还应避免使用 TreeViewer 中的表中的 getItems(),因为这不一定会为 TreeViewer 生成回调以填充项目。它还具有创建所有项目的副作用,从而消除了 SWT.VIRTUAL 的性能改进。

我试图用大约 700k 个项目来实现 TreeViewer。过滤/搜索功能非常慢(我使用过 FilteredTree)。

于 2012-10-30T11:16:15.117 回答