1

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

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

这导致了几个问题,目前让我感到害怕:

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

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

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

谢谢!

4

1 回答 1

1

1)听起来当您更改行数时选择不会保留 - 行数更改意味着支持数据更改,因此它可能会安全播放并将选择设置为第一行。您可以在更改行数之前查询选定的行,然后在更改行数后重置选择。

2)为了弄清楚的最大宽度是多少,表必须查询每一行中该单元格的每个值......要么你必须实现一个分页机制,这样你就可以返回一些导致零宽度的东西当该行不可见时,或者您可能希望针对 NatTable 提出一个错误,以请求仅基于可见列的自动调整大小模式的功能!

于 2012-11-16T15:18:31.073 回答