对检索速度较慢的大数据使用NatTable



我收到了一个关于NatTable SWT数据网格小部件的问题,我想用它来显示一个巨大的日志文件。

由于日志文件的大小可能有几GB,我无法将其完全加载到内存中。应用程序应该使用尽可能少的堆空间。因此,我的IDataProvider实现了它的getDataValue方法,在一个小的缓存机制和文件中原始行位置的缓存的帮助下,动态读取日志文件行。当打开一个文件时,几乎对其内容一无所知,甚至不知道表最终必须显示的行数。

这导致了目前让我抓狂的几个问题:

1) 我必须估计总行数(使用平均行长度),直到文件被完全扫描,并且确实知道最大行数。一旦出现这种情况,我的getRowCount方法就会返回实际的、正确的行数。这似乎吓坏了NatTable小部件,它完全失去了当前位置,跳到了第1行!

2) 当做一些直观的事情时,比如双击列的边框(像在Excel中一样自动调整列的大小),我的应用程序会完全冻结,因为突然使用我的提供程序查询所有行单元格的内容,整个概念被滥用了!我不希望任何东西触发完整的文件读取!

有人给我一些提示吗?文档太少,太糟糕了。。。非常感谢任何提示!如何防止我的应用程序冻结??

谢谢!

1)当您更改行数时,听起来所选内容不会被保留-行数的更改意味着备份数据的更改,因此可能是为了安全起见,将所选内容设置为第一行。您可以在更改行计数之前查询所选行,然后在更改行数后重置所选内容。

2) 为了计算的最大宽度,表必须查询每行中该单元格的每个值。。。要么你必须实现一个分页机制,这样当行不可见时,你就会返回一些导致零宽度的东西,要么你可能想对NatTable提出一个错误,请求一个仅基于可见列的自动调整大小模式的功能!

最新更新