java - 使用 NatTable 处理检索速度慢的大数据

标签 java swt large-files nattable large-data

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

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

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

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

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

有人给我一些提示吗?文档太少了,而且很糟糕...... 任何提示将不胜感激!如何防止我的应用程序卡住?

谢谢!

最佳答案

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

2) 为了弄清楚的最大宽度是多少,表格必须查询行中该单元格的每个值...您必须实现分页机制,以便在行不可见时返回导致零宽度的内容,或者您​​可能想要 raise a bug against NatTable请求仅基于可见列的自动调整大小模式功能!

关于java - 使用 NatTable 处理检索速度慢的大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12529859/

相关文章:

java - 在聊天应用程序中获取上次上线时间

java - 从一种方法到另一种方法访问 double 值

java - Listener 接口(interface)的 HandleEvent 与 <Selection/Key/Focus>Listener 接口(interface)的特定 <Selection/Key/Focus>Event 之间的区别

javascript - 使用 WebSocket 上传大文件

powershell - 在 Powershell 中将标准输入重定向到大文件 - 内存消耗

java - 使用证书身份验证将 Grails 配置为 POST

java - SWT : Repositioning/refreshing buttons in composite and setting composite size according to visible components

swt - 向 JFace 表中插入一个按钮

database - 部分堆排序以在 5GB 文件中找到 k 个最频繁出现的单词

java - Java 中未使用的参数