我正在使用Eclipse RCP(4)编写一个小尾部应用程序。在我的主窗口中,我希望显示文件的内容。我的第一个想法是使用SWT List
组件但我的问题是当我打开一个非常大的文件(超过100000行)时List
无法应对它。你知道我应该使用哪个组件吗?
我想根据某些条件过滤和/或突出显示记录,但我不想修改,因此它是只读的。
还有一件事:因为我无法将任意大(例如10 GB)文件加载到内存中,所以我只需将新行字符的位置读入List
,然后将具体行加载到String
中只有当他们要显示时。所以我需要一些只在它们变得可见时呈现线条的组件。
答案 0 :(得分:0)
您可以使用SWT.VIRTUAL
,以便可以实现延迟加载数据。
Here是Table和SWT.VIRTUAL的示例。
然而10GB是很多信息。我会以某种方式将文件分成许多块并加载它的特定部分。
[编辑]: 你应该知道的事情:
从3.1开始,TableViewer现在支持SWT.VIRTUAL标志。如果基础表是SWT.VIRTUAL,则内容提供者可以实现ILazyContentProvider而不是IStructuredContentProvider。请注意,在这种情况下,查看器不支持排序或过滤。另请注意,在这种情况下,如果未指定元素或尚未创建元素,则基于Widget的API可能会返回null。
SWT.VIRTUAL的用户还应避免在TreeViewer中使用Table中的getItems(),因为这不一定会为TreeViewer生成回调以填充项目。它还具有创建所有项目的副作用,从而消除了SWT.VIRTUAL的性能改进。
我尝试用大约700k项目实现TreeViewer。过滤器/搜索功能非常慢(我使用过FilteredTree)。