2012-09-21 39 views
1

我收到了一個關於我想用來顯示巨大日誌文件的NatTable SWT datagrid小部件的問題。將NatTable用於緩慢檢索的大數據

由於日誌文件大小可能爲幾GB,因此我無法將其完全加載到內存中。應用程序應該儘可能少地使用堆空間。因此,我的IDataProvider實現了它的getDataValue方法,通過小緩存機制和文件內原始行位置的緩存,即時讀取日誌文件行。當打開一個文件時,幾乎沒有任何關於它的內容的知道 - 甚至不需要表格最終要顯示的行數。

這導致了一些問題,這些問題目前嚇壞我了:

1)我估計總的行數(使用平均線路長度),直到該文件已被完全掃描,最大行數是真正知道當然。一旦發生這種情況,我的getRowCount方法將返回實際正確的行數。這似乎嚇倒了NatTable組件,它完全失去了它的當前位置並跳轉到第1行! 2)在雙擊列的邊框時(如自動調整列的大小,就像在Excel中)一樣直觀地做事情時,我的應用程序完全凍結,因爲突然使用我的提供程序查詢所有行單元格內容,整個概念被濫用!我不想讓任何東西觸發完整的文件讀取!

有沒有人對我有一些提示?該文件是如此之少,如此糟糕...... 任何提示是非常感謝!我怎樣才能防止我的應用程序凍結?

謝謝!

回答

1

1)當您更改行數時,聽起來不會保留選區 - 行數更改意味着支持數據更改,因此它可能會安全並將選區設置爲第一行。您可以在更改行數之前查詢所選行,然後在更改行數後重置選擇。

2)爲了弄清楚什麼是的最大寬度,該表查詢每個值在該小區每行......你要麼必須實現分頁機制等當行不可見時返回零寬度,或者您可能希望raise a bug against NatTable僅基於可見的列請求自動調整大小模式的功能!