Come si va a visualizzare una quantità enorme di righe nella tabella SWT? Enorme è qualcosa sopra le righe 20K, 20 colonne. Non chiedermi perché ho bisogno di mostrare tanti dati, non è questo il punto. Il punto è come farlo funzionare il più velocemente possibile in modo che l'utente non si annoi ad aspettare. Ogni riga visualizza un'istanza di qualche oggetto, le colonne sono le sue proprietà (alcune). Ho pensato di utilizzare il modello di provider di contenuti/etichette JFace, ma temo che sarà ancora più lento del colpire la tabella direttamente con i dati. Ecco come funziona:Popolamento di una tabella enorme nell'applicazione SWT/JFace RCP
Display.getDefault().asyncExec(new Runnable() {
public void run() {
List<MyObject> objects = model.getViewData();
for(MyObject object: objects){
TableItem item = new TableItem(table, SWT.NULL);
item.setImage(0, img1);
item.setBackground(color1);
item.setText(0, object.getProperty0());
item.setText(1, object.getProperty1());
item.setText(2, object.getProperty2());
.....
}
});
Disegno I record 20k sul computer richiedono circa 20 secondi. Il problema di prestazioni più grande che ho visto in Windows è causato dalla quantità incredibile di messaggi nativi di finestre inviati da SWT quando il nuovo elemento di tabella viene creato e popolato con testo. Ho trovato un ottimo rimedio per questo: nascondi la tabella prima di popolarla e poi mostrala quando hai finito. Basta chiamare table.setVisible (false) prima del ciclo e table.setVisible (true) dopo che il loop fa miracoli - la velocità aumenta di sei-sette volte!
Vorrei accelerarlo ancora di più. Cosa suggeriresti? Inoltre, mi chiedo come questo trucco che nasconde il widget possa funzionare su implementazioni non Windows di SWT (ovvero Linux)?
Questa è esattamente la soluzione, ora riempire 100k righe richiede quasi zero tempo, caratteristica davvero sorprendente, grazie mille! – Dima
@ralfstx Puoi dirmi come posso filtrare una tabella come questa? –
@AdamArold Puoi dare un'occhiata a 'DeferredContentProvider' per questo (vedi ad esempio questo [tutorial] (http://waynebeaton.wordpress.com/2008/01/16/deferredcontentprovider-my-new-favourite-thing/)) . Ma dovresti sapere che potrebbero esserci dei problemi con l'aggiornamento durante lo scorrimento: https://bugs.eclipse.org/bugs/show_bug.cgi?id=146799 – hnn